削除しようとしているマップへのポインタがあります(このマップにはnewが割り当てられています)。
このマップは有効だと思います。デバッグ中にカーソルを合わせると、次のように表示されpMap
ます[0]()
。
この空のマップを削除しようとすると、アプリが終了し、
myapp.exeの0xsomelocationでの初回例外:0xsomenumber:呼び出されたオブジェクトがクライアントから切断されました。
出力ウィンドウで。これは何を意味するのでしょうか?
ありがとう..
編集:ここにいくつかのサンプルコードがあります:
typedef map<const char*, StructA*, StructB> myMap;
typedef vector<myMap *> myMapStack;
StructBにはオーバーロードされた演算子があります()
編集:StructBは確かに構造体です、申し訳ありませんが、演算子()は単なる文字列比較関数です。
私のコードのある部分では、クラスのコンストラクターがメソッドを呼び出します。それをInitClass()と呼びましょう。これにより、myMapポインターが次のように初期化されます。
pMyMap = new myMap; // I also tried this with new myMap()
// this pointer is then pushed onto the a map stack
pMyMapStack.push_back(pMyMap);
後でこのクラスのデストラクタで、私は行きます
pMyMap = pMyMapStack.back();
pMyMapStack.pop_back();
delete pMyMap; // after I step over this line the app quits.. and displays that message
ありがとう
編集:動作していた古いバージョンのコードに戻しましたが、現在は正常に動作しています。
うまくいったのは次のようなものでした:
// after the pMyMapStack.pop_back()
int x = pMyMap->size();
if (x >= 0)
delete pMyMap;
以前、私はそれをこれに変更しました:
// after the pMyMapStack.pop_back()
int (x = pMyMap->size();
if (x >= 0){
pMyMap->clear();
delete pMyMap;
}
奇妙な..コードに何か問題があるかもしれませんが、まだどこにあるのかわかりません..コード全体を投稿すると大きすぎる(そしておそらく解雇されるでしょう)ので、そのままにしておきましょうそれで..
問題の原因となったのは、クリアまたは削除しようとしたnullマップへのポインターであった可能性があります。
助けようとしたすべての人に感謝します...:)