0

私は次の機能を持っています。

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 つのリストであることを忘れていました。

4

2 に答える 2

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

次のようにする必要があります。

  Sprite* temp = *it;
  it = activeBullets.erase(it); //use erase
  //it++; don't increment it
于 2012-11-15T20:05:41.483 に答える
1

イテレータが無効になるため、イテレータが指している要素を変更しないでください。解決策については、この質問を参照してください。

于 2012-11-15T20:05:46.100 に答える