벡터 std::vector<Bullet*> bullets
을 반복하면서 적과 충돌을 찾고 있습니다. 그것은 다음과 같은 경우를 제외하고 모든 경우에 훌륭하게 작동합니다. 마지막으로 발사 된 총알이 두 개 이상 있어야 적과 충돌합니다.마지막 std :: vector 요소를 지울 때 프로그램이 충돌합니다
코드 -
for(std::vector<Bullet*>::iterator it = bullets.begin(); it != bullets.end(); ++it)
{
if ((*it)->getSprite()->getGlobalBounds().intersects(enemy->getSprite()->getGlobalBounds()))
{
delete *it;
bullets.erase(it);
enemy->destroy();
if (bullets.size() == 0)
break;
}
}
은 내가 for
루프에서 특정 요소를 주석하고 bullet.erase(it)
호출이 프로그램을 충돌 사실을 발견했다. 해당 충돌이 발생하면 반환 코드 134 (0x86)가 표시됩니다. 이 코드의 문제점은 무엇입니까?
(*it)->getSprite()
은 Bullet
클래스에서 스프라이트에 대한 포인터를 반환합니다.
['std :: vector :: erase'] (http://en.cppreference.com/w/cpp/container/vector/erase)는 호출 후에 iterator를 무효화하고'++ it'을 만듭니다. '지우기', 정의되지 않은 행동. –
왜 std :: vector :: pop_back()이냐고 –
나는 다음과 같이하려고했습니다 : if (std :: next (it)) == bullets.end() bullets.pop_back(); else bullets.erase (it); 하지만 작동하지 않는 것 같습니다. –