首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >访问超出界限的数组不会出错,为什么?

访问超出界限的数组不会出错,为什么?
EN

Stack Overflow用户
提问于 2018-03-27 06:28:23
回答 2查看 0关注 0票数 0

我在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
$ ./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;

这个也不会产生错误。

EN

Stack Overflow用户

发布于 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
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档