为什么我编译时没有出错?
#include <iostream>
using namespace std;
int main()
{
int *a = new int[2];
// int a[2]; // even this is not giving error
a[0] = 0;
a[1] = 1;
a[2] = 2;
a[3] = 3;
a[100] = 4;
int b;
return 0;
}
有人可以解释为什么会这样。 在此先感谢。)
答案 0 :(得分:9)
因为未定义的行为==任何事情都可能发生。你不幸的是它不会崩溃,这种行为可能会隐藏错误。
至于a
被定义两次 - 这是编译器中的一个错误。
答案 1 :(得分:3)
我猜你是来自Java或类似Java的语言,一旦你走出数组的边界,就会得到“数组索引超出界限”的异常。
嗯,C期待你的更多;它节省了你要求的空间,但它不会检查你是否超出了那个节省空间的边界。一旦你如上所述那样做,程序就会有可怕的未定义行为。
并且记住未来如果你的程序中有一个错误并且你似乎找不到它,当你查看代码/调试它时,一切似乎都没问题,你很有可能“越界”并进入未分配的地方。
答案 2 :(得分:0)