为什么阵列单元超出阵列长度

时间:2015-03-17 16:19:18

标签: c++ arrays

在调试时我发现int数组为0的错误。在测试文档中,我使用了比单元长度更多的单元输入的数组。

int array[0];
for(int i = 0; i < 10; i++)
    array[i] = i;
for(int i = 0; i < 10; i++)
    cout << array[i];

编译完程序后,我得到了

0123456789

然后我收到了消息&#34; test.exe已停止工作&#34;。我期待这两个,但我感到困惑的是为什么编译器允许我创建一个0的数组,以及为什么程序不会崩溃直到程序的最后。我希望程序在超出数组长度时崩溃。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

编译器应该至少警告过一个零大小的数组 - 如果它没有考虑改变编译器。

请记住,数组只是一些内存,就像其他任何内存一样。在您的示例中,数组可能存储在堆栈中,因此在函数退出之前写下它的结尾可能不会造成太大问题。此时您可能会发现您在返回地址上写了一些文本,并且您会收到异常。写下数组的末尾是C / C ++中的错误的常见原因 - 只要感谢你在这个错误中得到错误并且它不会覆盖其他一些不相关的数据。