2017-02-14 31 views
0

在我的應用程序中,我將C++ std map與char *作爲關鍵字。以下是使用迭代器從映射擦除數據輸入的代碼示例。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檢測*** /應用程序/代碼/功能鋰/ CppMap:免費():無效指針:0x00007fffffffdbb8 *** – Chandu

+0

使用指針作爲關鍵是可疑的,爲什麼不簡單' std :: map '? – Jarod42

回答

6

removes the specified element from the container。沒有更多,不少。

+0

但是,雖然這樣做,我得到這個錯誤*** glibc檢測*** /應用程序/代碼/功能鋰/ CppMap:免費():無效指針:0x00007fffffffdbb8 *** – Chandu

+1

@ user2613486:然後發佈一個不同的問題,包含[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)詢問你的問題。 – DevSolar

2

以上代碼是否清除(釋放)鍵指針的內存?

您應該使用string類(如std::string)的密鑰類型,而不是原始字符指針:其實,使用字符串保證自動內存管理(包括內存清理)的字符串鍵。