我有以下功能。
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是两个列表。
答案 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。