访问数组越界没有错误,为什么?

访问数组越界没有错误,为什么?

我在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;}

程序打印34。应该是不可能的。我正在使用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;

而且这个也没有产生任何错误。


慕田峪4524236
浏览 1511回答 4
4回答

杨__羊羊

使用g ++,您可以添加命令行选项:&nbsp; -fstack-protector-all。在您的示例中,它产生以下结果:> g++ -o t -fstack-protector-all t.cc> ./t34/bin/bash: line 1: 15450 Segmentation fault&nbsp; &nbsp; &nbsp; ./t它并没有真正帮助你找到或者解决问题,但至少段错误会让你知道什么是错的。

萧十郎

g ++没有检查数组边界,你可能用3,4覆盖了一些东西,但没有什么真正重要的,如果你尝试使用更高的数字,你就会崩溃。您只是覆盖了未使用的堆栈部分,您可以继续直到到达堆栈的已分配空间的末尾并最终崩溃编辑:你无法解决这个问题,也许静态代码分析器可能会揭示这些故障,但这太简单了,即使对于静态分析器,也可能有类似(但更复杂)的故障未被发现
打开App,查看更多内容
随时随地看视频慕课网APP