我不得不從C++ std::map
刪除一些條目,爲此我遍歷std::map
和使用的擦除。但是我得到一個錯誤。該錯誤是這樣的:錯誤使用C++地圖抹去
0x0017f3f6 in std::_Rb_tree_rebalance_for_erase() from /usr/local/lib/libstdc++.so.6
(gdb) bt
#0 0x0017f3f6 in std::_Rb_tree_rebalance_for_erase() from /usr/local/lib/libstdc++.so.6
#1 0x00487ef4 in getLetters() from /usr/lib/libmail.so
#2 0x0048cacc in getHeader() from /usr/lib/libmail.so
#6 0x08048802 in __gxx_personality_v0()
#7 0x00251e9c in __libc_start_main() from /lib/libc.so.6
#8 0x080486a1 in __gxx_personality_v0()
(gdb)
的代碼是這樣的:
int nlsize=LettersMap.size();
if(nlsize > MAXNL)
{
std::map <std::string,MSG_HEADER>::iterator it;
int i=0;
for(i=0, it=LettersMap.begin(); i <nlsize-MAXNL ;i++, it++)
{
LettersMap.erase(it);
}
}
是否有人可以指出錯誤
[調用erase()後std :: map :: iterator的問題可能重複)(http://stackoverflow.com/questions/4636182/problem-with-stdmapiterator-after-calling-erase) – rerun
這是一個有點不尋常的方式來使用'set'。也許你應該仔細檢查它是否真的是正確的容器類型。 –
@KerrekSB:'set'?你在哪裏看到一個'set'?太晚了,是嗎? –