我在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;
这个也不会产生错误。
发布于 2018-03-27 15:34:26
使用g++,可以添加命令行选项:-fstack-protector-all
。
在您的示例中,结果如下:
> g++ -o t -fstack-protector-all t.cc
> ./t
3
4
/bin/bash: line 1: 15450 Segmentation fault ./t
https://stackoverflow.com/questions/-100003715
复制相似问题