關於stl容器中迭代器的刪除崩潰問題

這個事情碰得多了,雖然每次碰到都知道這是不對的,但是總是避免不了,就是下面類似的代碼

typedef std::vector<int> MsgList;

MsgList m_msgList;

for(MsgList::iterator iter=m_msgList.begin(); iter!=m_msgList.end(); ++iter)

{

m_msgList.erase(iter);

}

當然,上面只是個示例代碼,實際工程中肯定不會寫出這樣的代碼

一般 MsgList m_msgList;是在某個單件中(其實單件有時確實挺噁心的,不過披了件袈裟而已)

然後在for循環中給某個地方發了一個消息然後在回調消息的地方(消息回調可能是消息隊列,也可能是直接發到了回調函數,做了優化處理)調用了邪惡的m_msgList.erase(iter);

結局就是悲劇的,程序會崩到 ++iter 這個地方(最可惡的是調試時m_msgList可能是空的),而且開始看的時候還是二丈和尚摸不着頭,一般看到問題就容易解決了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章