2

std::vector<Pointer>Boostの侵入ptrと非常によく似た場所ポインタがあります。いくつかの違いがありますが、システムは何ヶ月もうまく機能しており、欠陥があるのではないかと疑っています. ベクターには 30 個までのインターフェイスのリストが含まれており、各要素にはかなり複雑なオブジェクトへの実装があります。クラッシュは次のように発生します。

v.clear() // -> CRASH

奇妙なことに、他の方法でベクトルをクリアするとクラッシュは発生しません。たとえば、次のコードはクラッシュしません。

while(v.size()) v.pop_back();
or
while(v.size()) v.erase(v.begin());

また、フラグ「/RTCsu」および「/RTCc」を指定してコンパイルしてもクラッシュしません。すべてのアイテムのリリースが正しく行われることをデバッグすると、クリア関数を正常に終了することさえできますが、クリア後に「ステップイン」すると、クリア関数に再び戻り、関数「イテレータ」を呼び出すとクラッシュします。終わり()"

これはどのように起こっていますか?デバッガーとアプリケーション検証ツールが関連情報を提供できなかったため、メモリのどの部分の破損をチェックする必要がありますか? 以前にこの問題に遭遇した人はいますか?

4

1 に答える 1

0

そのスマートポインターにはコピーコンストラクターと代入演算子がありますか? STL コンテナーは、含まれているアイテムのコピーを格納します。スマート ポインターに何か問題がある場合、それがあなたが説明した問題を引き起こした可能性があります。

于 2012-12-27T18:29:30.310 に答える