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_
、問題が修正されます。