gpt4 book ai didi

c++ - 神秘的赛格。过错

转载 作者:行者123 更新时间:2023-11-28 03:08:34 26 4
gpt4 key购买 nike

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

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

在我的 Lion 类(class)中,我扩展了这些:

    virtual void IsLion () {return true;}
virtual void IsHungry () {return mHungry;}
virtual void SetHungry () {mHungry = state;}

mHungry 是一个 bool 型成员变量,表示狮子是否饿了。

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)可能会导致段错误。

关于c++ - 神秘的赛格。过错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com