簡體   English   中英

神秘的塞格。 故障

[英]The mysterious Seg. 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中刪除項目時,它似乎是段錯誤。 有任何想法嗎?

從列表中刪除項后,指向該項的迭代器無效。 請參閱https://stackoverflow.com/a/3329962/1558890 在無效迭代器上調用i++ (或++i )可能會導致段錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM