为什么没有这个段错误?
#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;
}
但是当我在 for 循环中将 8 替换为 9 时,它会发生。
注意:我正在 32 位 crunchbang linux 上尝试
最佳答案
从技术上讲,这个程序的结果是 undefined behavior ,这意味着绝对不能保证允许此程序执行的操作。原则上,它可以格式化您的硬盘驱动器、通过电子邮件向您的所有 friend 发送令人讨厌的消息、点燃您的计算机,或者变得有意识并奴役人类。
在这种情况下,当 n = 8 时的未定义行为恰好没有做任何坏事,而当 n = 9 时的未定义行为会导致段错误。两者都是程序完全允许的行为,但完全不能保证可移植。
希望这对您有所帮助!
关于c - 为什么这段代码不会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425113/