作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!