[英]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.