【发布时间】:2012-02-17 10:16:41
【问题描述】:
我不得不从 c++ std::map 中删除一些条目,为此我迭代了 std::map 并使用了擦除。但我得到一个错误。错误是这样的:
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);
}
}
谁能指出错误
【问题讨论】:
-
这是使用
set的一种不同寻常的方式。也许你应该仔细检查它是否真的是正确的容器类型。 -
@KerrekSB:
set?你在哪里看到set?起得太晚了吧? -
@Als:哦,对不起。地图,布景,同样的东西……太醉了,不能清楚地张贴,我最好闭嘴!