为什么我没有用这个简单的代码得到段错误?

Adr*_*aqi 4 c arrays pointers segmentation-fault undefined-behavior

当我访问数组之外​​的项目时,我必须显示错误(不创建我自己的函数).所以我只是认为有必要从数组中访问值以触发段错误,但这段代码根本不会崩溃:

int main(){
    int tab[4];
    printf("%d", tab[7]);
}
Run Code Online (Sandbox Code Playgroud)

为什么我这样做时不能出错?

dbu*_*ush 8

当您调用未定义的行为时,任何事情都可能发生.您的程序可能会崩溃,它可能会显示奇怪的结果,或者它可能似乎正常工作.

此外,进行看似无关的更改(例如添加未使用的局部变量或简单调用)printf可以更改未定义行为的显示方式.

当我运行这个程序时,它完成并打印63.如果我将引用的索引从7更改为7000,我会得到段错误.

总之,不能因为程序可以崩溃并不意味着它.