为什么这段代码不会导致段错?

Sid*_*que 3 c segmentation-fault

为什么不是这个段错?

#include <stdio.h>
int main()
{
    int i;
    int arr[] = {1, 2, 3, 4};

    for(i=0;i<8;i++)
    {
        arr[i] = i;
        printf(" %d", arr[i]);
    }

    printf("\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我在for循环中用9替换8时它会这样做.

注意:我在32位crunchbang linux上尝试它

tem*_*def 14

从技术上讲,这个程序导致了不确定的行为,这意味着绝对不能保证允许该程序执行什么操作.它原则上可以格式化您的硬盘驱动器,向您的所有朋友发送恶意消息,将您的计算机置于火上,或者变得有感情并且奴役人类.

在这种情况下,当n = 8时未定义的行为碰巧没有做任何坏事,而当n = 9时未定义的行为导致段错误.两者都是该程序的完全允许行为,但根本不保证是可移植的.

希望这可以帮助!