【发布时间】:2014-11-06 00:41:00
【问题描述】:
我有一个问题,不知道如何正确解决它或为什么会出现错误。
我的问题: 我有 1 个循环,每 2 秒执行一个函数。该函数执行 for() 函数并擦除剩余时间为 0 的所有条目。如果剩余时间不为 0,则它将减少 2000(2 秒)。
但是在删除一个条目后,程序崩溃了……
提升地图:
boost::unordered_map<unsigned int, sBUFF_INFO*> p_BuffInfo;
从 2 秒循环执行的函数
void CSkill::DecreaseAllBuffRemTime()
{
for( itertype(p_BuffInfo) it = p_BuffInfo.begin(); it != p_BuffInfo.end(); it++ )
{
sBUFF_INFO* buff = it->second;
if(buff != NULL)
{
if(buff->dwTimeRemaining <= 0)
{
this->DelPcBuffInfo(buff->tblidx)
}else{
buff->dwTimeRemaining -= 2000;
}
}
}
}
DelPcBuffInfo 函数:
void CSkill::DelPcBuffInfo(unsigned int tblidx)
{
p_BuffInfo.erase(tblidx);
}
现在 DelPcBuffInfo 执行后程序崩溃。
在这一行它崩溃了:
sBUFF_INFO* buff = it->second;
调试时:
GameServer.exe 中 0x00578e0f 处未处理的异常:0xC0000005: 访问冲突读取位置 0xdddddd9.
it + node_ = hash_ CXX0030;错误:无法计算表达式
我真的不明白为什么会出现这个错误..
编辑: 如果我在 this->DelPcBuffInfo(buff->tblidx) 之后添加“return”,那么程序不会崩溃..
【问题讨论】: