gpt4 book ai didi

c++ boost map程序在删除后崩溃

转载 作者:行者123 更新时间:2023-11-30 01:50:58 24 4
gpt4 key购买 nike

我有一个问题,不知道如何正确解决它或为什么会出现错误。

我的问题:我有 1 个循环,每 2 秒执行一个函数。该函数执行 for() 函数并清除所有剩余时间为 0 的条目。如果剩余时间不为 0,则它将减少 2000(2 秒)。

但是在删除条目后程序崩溃了...

boost 图:

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;

调试时:

Unhandled exception at 0x00578e0f in GameServer.exe: 0xC0000005: Access violation reading location 0xddddddd9.

it + node_ = hash_ CXX0030;错误:无法计算表达式

我真的不明白为什么会出现这个错误..

编辑:如果我在 this->DelPcBuffInfo(buff->tblidx) 之后添加一个“return”那么程序就不会崩溃..

最佳答案

在容器中添加或删除项目通常会使您的迭代器失效。查看 unordered_map 迭代器的文档或此处:Iterator invalidation in boost::unordered_map

关于c++ boost map程序在删除后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com