为什么这个向量分配不起作用?

时间:2013-03-31 17:18:02

标签: c++ stdvector assignment-operator copy-assignment

类似的问题:


#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;
}

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

1 个答案:

答案 0 :(得分:7)

 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]的容量如何。那就是我想你在哪里得到了seg错误

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

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

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

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