读书人

删除容器中的元素出现断电有关问题

发布时间: 2013-07-09 09:50:48 作者: rapoo

删除容器中的元素出现断电问题

for (std::vector<CWeapon*>::iterator iter = m_WeaponArray.begin() ;iter != m_WeaponArray.end();)
{//遍历整个容器,如果有角色与球的距离小于10.f则让球消失,或者球与怪物的距离大于200就消失,反之更新球
if ((*iter)->isHit(CVector3(game->m_GameAction->getRolePos().x,15.f,game->m_GameAction->getRolePos().z)) == true){//如果胶水失效 则消失
/*delete *iter;*/
SAFE_DELETE((*iter));
iter = m_WeaponArray.erase(iter);

}else {
(*iter)->update();
++iter;
}
}
这里每次运行几秒就断电,段在SAFE_DELETE((*iter))上,大家帮我看看有什么语法错误么?
[解决办法]
在循环过程中,不要删除容器元素,直接修改 *iter = null;
循环结束后可以把值为null的全部erase掉,循环过程中不有这样的动作。因为删除容器元素,很可能导致容器内存位置变化,迭代器还指向原来容器的位置,这样就报错。
[解决办法]
楼主,因为你在遍历容器的时候删除了容器元素,导致迭代器迭代混乱,内存错误,元素可以删,只是删的时候别忘了将当前的迭代器指针保存一下

读书人网 >C++

热点推荐