遇到c ++ stl列表问题

时间:2012-11-15 20:03:28

标签: c++ list stl

我有以下功能。

void BulletFactory::update(Uint32 ticks) {
  std::list<Sprite*>::iterator it = activeBullets.begin();
  while (it != activeBullets.end()) {
    (*it)->update(ticks);
    if(!((*it)->inView())) {
      activeBullets.remove(*it);
      Sprite* temp = *it;
      it++;
      inactiveBullets.push_back(temp);
    } else {
      it++;
    }
  }
}

当条件!((*it)->inView())true时,存在分段错误。我无法看到问题。

编辑:忘了提到activeBullets和inactiveBullets是两个列表。

2 个答案:

答案 0 :(得分:6)

 activeBullets.remove(*it);
 Sprite* temp = *it; //<--- problem
 it++; //<-- problem

应该是:

  Sprite* temp = *it;
  it = activeBullets.erase(it); //use erase
  //it++; don't increment it

答案 1 :(得分:1)

您不能修改迭代器指向的元素,因为它会使迭代器无效。有关解决方案,请参阅this question