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

C++ 为什么数组单元格可以超过数组长度,c++,arrays,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]; 然后我收到消息test.exe已停止工作。这两个我都预料到了,但我感到困惑的是,为什么编译器允许我创建一个0数组,为什么程序直到程序结束才崩

调试时,我发现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];
然后我收到消息test.exe已停止工作。这两个我都预料到了,但我感到困惑的是,为什么编译器允许我创建一个0数组,为什么程序直到程序结束才崩溃。我预计一旦超过数组长度,程序就会崩溃


有人能解释一下吗?

编译器至少应该警告过您零大小数组的存在——如果没有的话。。考虑更改编译器。


请记住,数组和其他数组一样,只是一点内存。在您的示例中,数组可能存储在堆栈上,因此在函数退出之前,注销它的结尾可能不会引起太多问题。在这一点上,你可能会发现你在回信地址上写了一些文字,你会得到一个例外。注销数组结尾是C/C++中出现错误的常见原因-感谢您在这一错误中出错,它并没有覆盖其他一些不相关的数据。

欢迎使用。该语言不允许使用零大小的数组。如果您至少没有收到编译器关于扩展的警告,那么您需要提高警告级别。为什么编译器悄悄地允许使用零大小的数组?你的编译器要么是被破解了,要么根本不是C++编译器。
0123456789