我使用的地圖是這樣的:地圖裝滿垃圾紀錄
map<int,CUser*> m_mUsers;
...
for (i = m_mUsers.begin(); i != m_mUsers.end(); i++)
{
if((*i).second->GetUserID() == pUser->GetUserID())
(*i).second->OnDeviceLogout(pUser);
}
...
添加到地圖:
m_mUsers[ sd ] = pUser;
刪除地圖:
i = m_mUsers.find(sd);
m_mUsers.erase(i);
當我運行這一點,主要是它的工作原理是我所期待。但很少,垃圾紀錄留在地圖上,所以當我嘗試通過什麼預期是一個空的地圖迭代,我碰上垃圾的記錄,並在I->二線> GetUserID崩潰()...什麼我做錯了嗎?
如果什麼'i'是'end'?另外,一個問題可能被隱藏 - 這個「pUser」可能會損壞地圖中的元素,因爲它只是一個指針。 – 2013-03-21 11:34:40
我有一個調試技巧給你。實現一個遍歷地圖並通過調用簡單的驗證函數來驗證每個節點的函數。當您從地圖中刪除節點時,將該節點標記爲無效,以便驗證功能投訴。然後在你的代碼周圍撒上驗證函數。通過這種方式,您可以儘早發現失效並更好地處理根本原因。 – 2013-03-21 11:39:30