c++ - C++ 中的 vector : Why does the outer dimension give EXC_BAD_ACCESS and the inner dimension doesn't?

标签 c++ vector stdvector

我有以下代码用于整数 vector 的 vector (即整数矩阵..)

vector<vector<int> > scores (3, vector<int>(2,0));
cout<<scores[1][5];

这不会给出 EXC_BAD_ACCESS,但是会:

cout<<scores[5][1];

为什么行为不同?

澄清一下:这并不特定于给出的示例数字。当内部维度越界时,永远不会出错,但对于外部维度则不然!

最佳答案

无论哪种方式,越界访问都是未定义的行为。

所以任何事情都允许发生。一个案例崩溃而另一个案例没有崩溃只是“碰巧”。


至于为什么第一种情况不会崩溃而第二种情况在您的特定情况下会崩溃,第一种情况主要只是将数组读取到垃圾堆内存中。

但在第二种情况下,您访问的是错误的 vector 对象。由于 vector 对象只是指针的包装器,因此在第二个索引上取消引用该(错误的)指针将会崩溃。

关于c++ - C++ 中的 vector : Why does the outer dimension give EXC_BAD_ACCESS and the inner dimension doesn't?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598897/

相关文章:

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

c++ - 如何在不在主程序流程中调用的情况下填充全局变量?

c++ - 是否可以在不对抽象的父类中的函数使用 virtual 关键字的情况下覆盖 C++ 子类中的函数?

<IMG> 上的 CSS 背景颜色使用外部 SVG 作为 SRC

Java多客户端服务器应用程序-如何组织套接字

C++11 多重移动构造函数调用

c++ - 引用 vector::front 有效,但 vector::begin 无效

C++ vector 下限和上限检查

c++ - Newton Raphson 混合算法未达到解决方案

c++ - 虚拟类: are pointers the clean way to go?的 vector