首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ STL库向量2D数组未越界

C++ STL库向量2D数组未越界
EN

Stack Overflow用户
提问于 2015-05-10 14:51:14
回答 1查看 118关注 0票数 0

当我尝试运行下面的C++代码时,它没有返回越界错误。实际上,它运行得很好,输出结果是11。为什么会这样呢?

代码语言:javascript
运行
复制
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector< vector<int> > Matrix(10, vector<int>(10));
    Matrix[9][10000]=11;
    cout<<Matrix[9][10000];
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2015-05-10 14:56:46

C++不对vector%s的operator[]进行越界检查,因此访问越界元素是未定义的行为。它可以很好地运行没有任何问题,或者可能会崩溃你的程序,甚至格式化你的硬盘驱动器。

事实上,对于小的遗漏(像几个元素等),访问可能会落入你的程序拥有的内存中,所以程序很可能会在没有注意到它的情况下运行。(前提是不覆盖其他重要变量。)特别是,vector通常保留比它们实际使用的内存更多的内存,因此vector的一个小失误很可能会落入已分配但未使用的内存中,并将正常运行。

在这种特殊的情况下,正确的运行是非常奇怪的,因为它离界限很远,但我认为优化器可能会优化掉数组访问。它可以看到相同的元素被分配和打印,并可以删除指定和打印。

要进行适当的边界检查,可以使用.at()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30148539

复制
相关文章

相似问题

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