C++中的Vector:为什么外部维度给出了EXC_BAD_ACCESS而内部维度没有?

Den*_*niz 1 c++ vector stdvector

我有以下代码为整数向量的向量(即整数矩阵..)

vector<vector<int> > scores (3, vector<int>(2,0));
cout<<scores[1][5];
Run Code Online (Sandbox Code Playgroud)

这不会给出EXC_BAD_ACCESS,但这样做:

cout<<scores[5][1];
Run Code Online (Sandbox Code Playgroud)

为什么行为不同?

只是为了澄清:这并不是特定于给出的示例数字.当内部维度超出界限时,永远不会出现错误,外部则不然!

Mys*_*ial 6

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

所以任何事都可以发生.只是"发生"一个案件崩溃而另一个案件没有崩溃.


至于为什么第一种情况不会崩溃而第二种情况在你的特定情况下会发生,第一种情况大多只是将数据读入垃圾堆内存.

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