Posts
vector を fill_n してクラッシュ
「ポインタ配列を作成して NULL で初期化」というありふれたコードを書いた。
int size = 100; // ポインタ配列 std::vector< HOGE* > lphoges; // 予め確保 lphoges.reserve( size ); // NULL で初期化 std::fill_n( lphoges.begin(), size, static_cast< HOGE* >(NULL) );
プログラムを実行すると fill_n のところでクラッシュして停止してしまう。原因がわからず暫く悩んでしまったが、reserve の挙動を勘違いしていただけだった。
void reserve(size_type n);
領域を拡張することなしに少なくとも n 個の要素を格納できるよう、領域を確保します。
reserve は capacity を増やすものであって、size を増やすものではない。Effective STL でも触れられていたのにすっかり忘れていた。