访问数组越界没有错误,为什么?我在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
$ ./errorRange34只有在分配时才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;而且这个也没有产生任何错误。
4 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
使用g ++,您可以添加命令行选项: -fstack-protector-all。
在您的示例中,它产生以下结果:
> g++ -o t -fstack-protector-all t.cc
> ./t
3
4
/bin/bash: line 1: 15450 Segmentation fault ./t
它并没有真正帮助你找到或者解决问题,但至少段错误会让你知道什么是错的。
萧十郎
TA贡献1815条经验 获得超12个赞
g ++没有检查数组边界,你可能用3,4覆盖了一些东西,但没有什么真正重要的,如果你尝试使用更高的数字,你就会崩溃。
您只是覆盖了未使用的堆栈部分,您可以继续直到到达堆栈的已分配空间的末尾并最终崩溃
编辑:你无法解决这个问题,也许静态代码分析器可能会揭示这些故障,但这太简单了,即使对于静态分析器,也可能有类似(但更复杂)的故障未被发现
添加回答
举报
0/150
提交
取消