std :: vector的初始化错误?

时间:2016-02-19 17:11:26

标签: c++

这是我宣布我的向量的方式:

  std::vector <Link *> _components;

链接是这种结构:

  struct Link
  {
    size_t targetPin;
    nts::IComponent *component;
  };

首先将其初始化为

  this->_components.reserve(2);

然后,当这个指令发生时,它会发生段错误

  this->_components[0]->component = this;

有个主意吗?

1 个答案:

答案 0 :(得分:2)

Reserve会扩展向量的容量,它实际上不会增加​​大小,访问超出大小的成员是非法的。

this->_components.resize(2);

是你似乎需要的。

如果您的向量的固定大小为2,则可能需要考虑使用std::array

---编辑---

您的第二个问题是您尚未向任何成员分配Link*。他们是空指针。

除非您有std::vector<Link>个对象用指针填充向量,否则您可能需要std::vector<Link*>而不是Link