<分区>
我在 C 中运行以下代码(使用 gcc 编译):-
#include <stdio.h>
int main() {
float box[2][2];
box[3][3] = 1;
printf("%f", box[3][3]);
return 0;
}
输出:-
1.000000
为什么 C 不给我段错误/数组索引越界?感谢您的帮助。
<分区>
我在 C 中运行以下代码(使用 gcc 编译):-
#include <stdio.h>
int main() {
float box[2][2];
box[3][3] = 1;
printf("%f", box[3][3]);
return 0;
}
输出:-
1.000000
为什么 C 不给我段错误/数组索引越界?感谢您的帮助。
最佳答案
是的,C 不阻止越界访问,它指定它们具有未定义的行为。
未定义的行为有时会让人非常困惑,因为程序似乎具有预期的行为。
您正在修改超出 box
末尾的内存块,这可能会导致崩溃,但并没有(或还没有……)并且从中读取返回写入的值(这又是未定义的行为,但似乎可以工作)。
程序退出,有可能没有发生进一步的损坏,但谁知道呢……修改 box[3][3]
可能会改变堆栈中的位置函数的返回值被存储,在 main
返回到它的调用者之后导致崩溃,或者其他任何事情......希望不是星期一在巴黎圣母院发生的火灾。
关于c - 在 C 中越界访问数组不会产生运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55764391/