c - 在 C 中越界访问数组不会产生运行时错误

标签 c arrays

<分区>

我在 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/

相关文章:

c - 使用调试宏而不是简单的函数有什么好处?

Python:提取 2D numpy 数组的核心

C - 指向随机值的指针

c# - 收到空错误 "Unhandled Exception: System.NullException: Value cannot be null"C#

调用函数时出现错误 : too few arguments to function ‘quicksort’

C 编程 : for loop and break

ios - 如何使 Obj-C 库全局可重命名(每个类/导出的符号)?

x = [x] && x.push(x) when var x; 之间的 javascript 数组混淆

c# - 不能在 ArrayList 和 Array 之间应用 ??-operator

c - C语言中如何将一个字符串分成3部分