This question already has answers here:
Closed 7 months ago.
How dangerous is it to access an array out of bounds?
(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