为什么数组单元格可以超过数组长度

  • 本文关键字:数组 单元格 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

然后我收到消息"测试.exe已停止工作"。我期望这两个,但我感到困惑的是为什么编译器允许我创建一个 0 数组,以及为什么程序直到程序结束时才会崩溃。我预计一旦超过数组长度,程序就会崩溃。

有人可以解释一下吗?

编译器

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

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

最新更新