在C中访问数组超出范围不会产生运行时错误[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我在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 arrays
1个回答
3
投票

是的,C不会阻止超出限制的访问,它将它们指定为具有未定义的行为。

由于程序似乎具有预期的行为,因此未定义的行为有时会非常混乱。

你正在修改一个超出box结尾的内存块,这可能导致崩溃,但是没有(或者还没有......)并且从它读回来返回写入的值(这也是未定义的行为,但看起来似乎上班)。

程序退出,并且有可能没有发生进一步的损坏,但谁知道...修改box[3][3]可能已经改变了存储函数返回值的堆栈上的位置,导致main返回到其后的崩溃打电话,或其他任何事情......希望周一在巴黎圣母院大火。

© www.soinside.com 2019 - 2024. All rights reserved.