调整指针段错误的矢量

时间:2012-07-26 18:38:36

标签: c++ vector resize segmentation-fault

我一直在尝试这种奇怪的std::vector行为,这是我无法理解的。

粗略地说,代码看起来像

#include <iostream>
#include <vector>

class MyClass{
public:
  MyClass():
    v_(),
    w_(init_w())
  {};

  ~MyClass()
  {};

  std::vector<int*> init_w()
  {
    v_.resize(4096);
    return v_;
  };
private:
  std::vector<int*> w_;
  std::vector<int*> v_;
};

int main()
{
  MyClass a;
}

resize处运行此操作会给我带来错误的段错误。如果为resize选择了较低的值,则代码可能根本不会出现段错误。

更新 问题是,与初始化列表指示的内容相反,w_v_之前初始化。因此,在init_w()中,v_状态未定义。 在声明中恢复v_w_的顺序可以解决问题。

1 个答案:

答案 0 :(得分:2)

  

问题在于,与初始化列表指示的内容相反,w_在v _

之前初始化

你推断是这样的,但事实上并非如此。清单的顺序无关紧要;类中的声明顺序是。因此,如果您想了解成员实际的初始化方式,您的初始化列表应该模仿声明顺序。

我的问题是;为什么你使用指针向量开始?在对象超出范围或遭受内存泄漏之前,您是否意识到需要delete列表中的每个元素?