神秘的塞格。故障

时间:2013-09-29 03:37:03

标签: c++ segmentation-fault

我有一个动物类,并从这个特定的动物派生。我有一个名为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中删除项目时,它似乎是段错误。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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