为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

访问数组越界没有错误,为什么?我在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

它并没有真正帮助你找到或者解决问题,但至少段错误会让你知道什么是错的。


查看完整回答
反对 回复 2019-05-25
?
萧十郎

TA贡献1815条经验 获得超12个赞

g ++没有检查数组边界,你可能用3,4覆盖了一些东西,但没有什么真正重要的,如果你尝试使用更高的数字,你就会崩溃。

您只是覆盖了未使用的堆栈部分,您可以继续直到到达堆栈的已分配空间的末尾并最终崩溃

编辑:你无法解决这个问题,也许静态代码分析器可能会揭示这些故障,但这太简单了,即使对于静态分析器,也可能有类似(但更复杂)的故障未被发现


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 1493 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信