This question already has answers here:
Closed 7 months ago.
How dangerous is it to access an array out of bounds?
(10个答案)
我正在C语言中运行以下代码(使用gcc编译):-
输出:-
为什么C不给我分段错误/数组索引越界?如有任何帮助,我们将不胜感激。
(10个答案)
我正在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/
10-10 10:20