我正在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
不会自动调整大小!这只是未定义行为! - Pavel Minaev