我有一个动物类,并从这个特定的动物派生。我有一个名为mItems的动物清单。我想看看我的狮子是否饿了。我在我的Animals类中创建了虚函数:
virtual void IsLion() {return false;}
virtual void IsHungry() {return false;}
virtual void SetHungry(bool state) {}
在我的Lion课程中,我扩展了这些:
virtual void IsLion () {return true;}
virtual void IsHungry () {return mHungry;}
virtual void SetHungry () {mHungry = state;}
mHungry是一个布尔成员变量,表示狮子是否饿了。
void CSafari::KillHungryLion()
{
for(list<CAnimals *>::iterator i=mItems.begin();
i != mAnimals.end(); i++)
{
if((*i)->IsLion())
{
if((*i)->IsHungry())
{
mItems.remove(*i);
delete *i;
}
}
}
}
mItems是指向CAnimal对象的指针列表。
如果狮子饿了,他就死定了!我遇到的问题是无休止的段错误。我无法确定我哪里出错了。我有一个功能基本上相当于这个定期更新狮子饥饿的功能,然后我称之为。当我尝试从mItems中删除项目时,它似乎是段错误。有什么想法吗?
答案 0 :(得分:2)
从列表中删除项目后,指向该项目的迭代器无效。见https://stackoverflow.com/a/3329962/1558890。在无效迭代器上调用i++
(或++i
)可能会导致段错误。