【发布时间】:2017-06-17 19:58:33
【问题描述】:
我用 C 编写了一个简短的程序,只是为了看看当索引超出数组末尾时会发生什么。
我发现它主要产生随机值(我知道它们实际上不是随机的),直到它每次产生 0 的点(在这种情况下超过末尾的 52 个索引)。超过此点的每个值都会导致程序崩溃。为什么是这样?程序分配的内存空间结束了吗?
main()
{
int ar[4];
ar[0] = 99;
ar[1] = 45;
printf("array: %d, %d random value: %d", ar[0], ar[1], ar[55]);
}
编辑:我还发现,如果我更改这个始终为 0 的值(即 ar[55] = 1000),那么程序的返回码就会上升。
【问题讨论】:
-
这是未定义的行为!!! C 语言标准没有规定程序在此操作之后的行为(例如,与 Java
IndexOutOfBound异常相反)。 -
它从堆栈中掉了出来,崩溃了。如果您尝试读取现有地址崩溃。如果它掉出来,堆就会崩溃。如果试图写出bonaryes,会损坏内存处理程序
标签: c arrays undefined-behavior