イテレータを使ってリストの要素のポインタが指すインスタンスをdeleteしようとしたところ、
出てきたエラーをどうすることもできず皆様のお知恵をお借りしに参りました。
OSはXP,エディタはVisualStudio2008です。
listに格納されたNumberObjectという型のポインタを最初から順番に全て調べ、
NumberObject::DeleteThisがtrueであればそのポインタが指すインスタンスをdeleteし、
listからも削除する、ということを行いたいと思っています。
以下はそのために書いたコードです。
グローバル変数として、他のファイルでlist<NumberObject*> NOM;と宣言してあります。
なお、NumberObject::ObjectMain()はDeleteThisを状況に応じてtrueにする処理です。
listに新しいNumberObjectのポインタを格納する処理は別の場所で行っています。
... list<NumberObject*>::iterator NOMit=NOM.begin(); while(NOMit!=NOM.end()) { (*NOMit)->ObjectMain(); if((*NOMit)->DeleteThis==true) { delete *NOMit; NOMit=NOM.erase(NOMit); } else ++NOMit; } ...このコードを実行したところ、
delete *NOMit;
の行でHEAP CORRUPTION DETECTEDというエラーが発生してしまいました。
イテレータ自体をdeleteしてしまったのかな?と思い、
delete *NOMit;
の行を
NumberObject* NOTemp=*NOMit;
delete NOTemp;
としてみましたが、こちらもエラーでした。
どのようにすれば、イテレータが指すポインタが指すインスタンスをdeleteできるのでしょうか。