【发布时间】:2012-07-26 18:38:35
【问题描述】:
我一直遇到这种奇怪的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_ 的顺序可以解决此问题。
【问题讨论】:
-
请给出一个显示问题的最小编译示例。
-
@rhalbersma 我已经努力了几个小时将代码分解成一些小而简单的代码,但失败了,但没有成功。我知道这使得很难找到错误。
-
@Nico:不难,不可能。恐怕我是-1。
-
@chris 没关系,因为向量元素类型是指针。
-
对this similar question 的回答可能会帮助您查明段错误的来源。
标签: c++ vector resize segmentation-fault