2017-02-14 26 views
0

私のアプリケーションでは、char *のキーとしてC++ std mapを使用しています。次に、イテレータを使用してマップからデータエントリを消去するコード例を示します。C++ std mapの消去機能はポインタキーのメモリを解放しますか?

// map declaration in the code 
map<VcmU8T*, time_t, DataMapStrCmpT> mDataMap; 

auto it = mDataMap.find(apKey); 
if (it != mDataMap.end()) { 
    mDataMap.erase(it); 
} 

上記のコードは、キーポインタのメモリをクリア(フリー)していますか?

+6

なぜ地球上でしょうか? –

+0

私はこのエラーが発生しているので*** glibcは***/app/Code/feature-li/CppMapを検出しました:free():無効なポインタ:0x00007fffffffdbb8 *** – Chandu

+0

ポインタをキーとして使用すると、 std :: map '? – Jarod42

答えて

6

それremoves the specified element from the container。それ以上はない。

+0

これを行っている間、私はこのエラーを受け取りました*** glibcは***/app/Code/feature-li/CppMap:free():無効なポインタを検出しました:0x00007fffffffdbb8 *** – Chandu

+1

@ user2613486:あなたの問題について尋ねる[最小、完全、そして検証可能な例](http://stackoverflow.com/help/mcve)。 – DevSolar

2

上記のコードは、キーポインタのメモリをクリア(フリー)していますか?実際には、文字列クラスに保証を使用して自動メモリ管理:

あなたは文字列クラス(例えばstd::string)の代わりに、生の文字ポインタのキータイプ、などを使用する必要があります(メモリクリーンアップを含む)を文字列キーに追加します。

関連する問題