文字列をキーとして使用し、カスタムオブジェクトのポインタを値として使用するマップがあります。実行時に、ユーザーはマップに自動的に追加されるこのオブジェクトのインスタンス(ポインタ)を作成できます。 DrMemoryを使用して、リーク(例:メモリリーク)があるかどうかを確認します。終了時に自動的に解放されるポインタを持つC++マップ、削除の処理方法
私はマップを含むポインタを手動で削除せずにアプリケーションをテストしましたが、エラーは発生しませんでした(メモリリークもありません)。安全面を保つために、私はまた、マップを反復して各ポインタを手動で削除するプログラムを終了するときに呼び出されるメソッドでテストを行いました。
私は今それでテストを実行すると、私は同じ種類のいくつかのエラーを取得:解放されたメモリの
アドレス不能アクセスを...
発生のラインがきれいなの場所を指しています。
私の質問は今では:私は、メソッドをコールして(したがって、単にエラーを無視する)を保持する必要がありますまたは私は呼び出しを削除し、手動でポインタを削除する必要はないことが分かっているままにしておく必要があります?
私はポインタを削除し、マップ
void cleanUp(std::map <string, Car*>* map){
for(auto const& x : *map){
delete x.second;
map->erase(x.first);
}
}
マップから値を削除するときは、その値を含むエントリ/キーも消去する必要があります。 – 101010
私はそれをやっています: for(auto const&x:* map){ \t \t delete x.second; \t \t map-> erase(x.first); } – NL3
あなたは何を意味するのかを示す[MCVE]を見せてください。 – BoBTFish