我在C ++程序中分配值,如下所示:
#include <iostream>
using namespace std;
int main()
{
int array[2];
array[0] = 1;
array[1] = 2;
array[3] = 3;
array[4] = 4;
cout << array[3] << endl;
cout << array[4] << endl;
return 0;
}
程序将打印3
和4
。这应该是不可能的。我正在使用g ++ 4.3.3
这是编译并运行命令
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
只有在分配时array[3000]=3000
,它才会给我带来细分错误。
如果gcc不检查数组边界,我如何确定我的程序是否正确,因为以后可能会导致一些严重的问题?
我将上面的代码替换为
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
而且这个也不会产生错误。
vector
不会自动调整大小!只是UB!