1

类似问题:


#include <vector>
#include <iostream>

using namespace std;

int main() {
  vector<vector<int> > vvi;
  vvi.resize(1);
  vvi[0].reserve(1);
  vvi[0][0] = 1;

  vector<int> vi = vvi[0];

  cout << vi[0]; // cout << vvi[0][0]; works

  return 0;
}

这给了我一个段错误,我不知道为什么。

4

1 回答 1

8
 vvi[0].reserve(1);
 vvi[0][0] = 1;

你需要resize,不是reserve

i访问i>=v.size()未定义行为的元素。reserve影响capacity,不是size

如果我要进入实际方面,我可能会推测您可能会成功完成任务vvi[0][0] = 1;(至少在发布模式下)。但主要的实际问题在这里

vector<int> vi = vvi[0];

问题是vvi[0]' 的大小为 0,因此vi' 的内部数组大小为 0,与vvi[0]' 的容量无关。这就是我认为你得到段错误的地方,在你之后

cout << vi[0]; // cout << vvi[0][0]; works

但这都是猜测。你的问题的正确答案是这个

vvi[0].reserve(1);
vvi[0][0] = 1;

已经有未定义的行为,不需要进一步考虑。

于 2013-03-31T17:19:15.607 回答