不具合はまだ直っていない

公開:2012-05-27 07:05
更新:2020-02-15 04:37
カテゴリ:c++,シューティングゲーム,ゲーム,ゲーム製作

今ハマっている不具合は、下記のコードの中で起きる。


  for(int i = 0; i < channel;++i){
    Voice v(waveTables_,(float)format.Format.nSamplesPerSec);
    v.SetTimber(&timbers_[0]);
    voices_.push_back(std::move(v));
  }

voices_はstd::vectorで、Voiceをpush_backするときにその内部で不具合は起きる。ループの1回目ではpush_backは問題なく完了するものの、2回目のpushbackで格納領域を増やすためのreserve()が呼ばれ、その後コピーコンストラクタが呼ばれるのだが、そのパラメータであるコピー元のオブジェクトがきちんと初期化されていないのだ。先にvoices.reserve(channel)とかしておくとその不具合は発生しない。

おそらく凡ミスだと思うんだけど、1週間悩み続けている。