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_
声明中的顺序可以解决问题。