读书人

地图嵌套删除元素 报错Unhandled exce

发布时间: 2013-10-23 11:39:13 作者: rapoo

map嵌套删除元素 报错Unhandled exception in *:0xC0000005 Access Violation
map嵌套删除元素 报错Unhandled exception in *:0xC0000005 Access Violation
在线程里面执行了下面的语句后报错:

if(0 == time(NULL)%7)
{

for(pointer = map_tidtocid.begin(); pointer!= map_tidtocid.end(); pointer++)
{
for(it = pointer->second.begin(); it != pointer->second.end(); it++, i++)
{
printf(">>>>ServerStage::map tid=%d--cid=%d--delaytime=%03d--i=%d\r\n", pointer->first, it->first, time(NULL)-it->second, i);
if(8 < time(NULL)-it->second)
{
pointer->second.erase(it);//超时后删除cid
printf(">>>>Delete tid=%d--cid=%d--time=%d--i=%d\r\n", pointer->first, it->first, time(NULL)-it->second, i);
}
}

}
}
STL?map 删除map erase.() 线程 map
[解决办法]
先放在单线程的情况环境下,看一下是否还有错误,如果还有错误的话,就单步跟踪一下,就能找到什么地方出错了
[解决办法]
pointer->second.erase(it); 删除元素后,当前迭代器失效。
[解决办法]
1.创建map的副本
2.循环中只删除副本的元素
3.最后将副本和原始的交换

读书人网 >C++

热点推荐