0

我有一个 Animals 类,并从这个特定的动物派生出来。我有一个名为 mItems 的动物列表。我想看看我的狮子是否饿了。我在我的 Animals 类中创建了虚函数:

    virtual void IsLion() {return false;}
    virtual void IsHungry() {return false;}
    virtual void SetHungry(bool state) {}

在我的狮子课程中,我扩展了这些:

    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 中删除项目时,它似乎出现了段错误。有任何想法吗?

4

1 回答 1

2

从列表中删除项目后,指向该项目的迭代器无效。请参阅https://stackoverflow.com/a/3329962/1558890。在无效的迭代器上调用i++(或++i)可能会导致段错误。

于 2013-09-29T03:43:19.363 回答