Vector iterators incompatible求解

使用vs2012做一个游戏,从大地图scene切换到战斗scene,战斗scene使用vector管理角色,战斗完成后返回大地图,第二次进入战斗scene时,vector无法遍历,一旦遍历就会发生错误:vector iterators incompatible,换其他array以及list都是一样的状况?百度找了好久没找到答案,请求大神帮忙:3::3:

无代码无真相啊

战斗的scene被销毁了吗?

如何销毁??我直接使用pushScene和popScene。。。 :10: 有用过导演的end,replaceScene。。。都是一样的状况啊

Director::getInstance()->pushScene(FightScene::createScene());使用这个进入战斗场景
Director::getInstance()->popScene();这个回到大地图

vector<RolePlayer*> rolePlayersVec;战斗场景类里面定义两个vector来管理玩家控制角色与npc,以便在需要的时候能遍历角色,并对角色运行动画或移除死亡角色等
vector<RoleNPC*> roleNPCsVec;

应用启动后第一次进入战斗场景一切正常,直至战斗完毕,第二次进入战斗场景,场景绘制也没有问题,一直到执行遍历操作的代码时就出现错误,
void FightScene::byAttackable(Ref* obj)
{
for (auto p : roleNPCsVec)//点击攻击menu之后将链表中的npc更换纹理加亮显示
p->setSpriteFrame(p->getRoleName());
}
操作角色点击攻击后,这个是遍历npc角色并更换纹理加亮显示,显示可以点击,就在这里就出问题了

#if _ITERATOR_DEBUG_LEVEL == 2
if (this->_Getcont() == 0
|| this->_Ptr == 0
|| this->_Ptr < ((_Myvec *)this->_Getcont())->_Myfirst
|| ((_Myvec *)this->_Getcont())->_Mylast <= this->_Ptr) 程序中断之后代码会跳转到这里。。。只是实在不明白
{ // report error
_DEBUG_ERROR(“vector iterator not dereferencable”);
_SCL_SECURE_OUT_OF_RANGE;
}

通过断点调试发现,第二次进入战斗场景,在遍历vector前发现vector的begin()返回 ???,使用size()则是很大很大的数字。。。。

有没有试过clean一下项目再编译,有时候可以解决一些莫名其妙的问题

我已经找到问题了,谢谢!

原因是因为我遍历vector的函数时通过通知中心调用的,切换Scene的时候没有将观察者移除。。。