Expression: list iterator not incrementable

전에 제작한 알카노이드에서 총알을 구현할때 데이터를 Bullet 구조체로 만들고나서, STL::List<Bullet*> 형태로 구현했는데, 총알이 화면밖으로 나가서 사라질때 (메모리에서 해제를 할때) 에러가 발생.

iterater 쪽에서 뭔가 실수를 한 모양인지라 뭔 실수를 했나 찾아봤지만, 찾아봐도 알수가 없었다. 사실 그때가 STL을 실제로 사용하는건 처음이라 알리가 있나 –_-;;

구글 검색을 해보니 몇개의 링크를 열어본뒤에 답이 나왔다!!! 내가 생각하기엔 이렇게 코드를 작성하면 아주 깨끗하게? 삭제가 될거라 생각했는데, failed!! 캡쳐화면과 같은 오류가 발생.
// 오류나는 소스
for( std::list<BULLET*>::iterator it = g_bulletlist.begin();
     it != g_bulletlist.end() ; it++ )
{
    delete (*it);
}
 
구글에서 찾아보니 STL에서 iterator를 돌면서 삭제 할때는 아래와 같은 방법이 옳다고 한다.
for( std::list<BULLET*>::iterator it = g_bulletlist.begin();
     it != g_bulletlist.end() ; )
{
    if((*it) != NULL) {
        delete (*it);
        it = g_bulletlist.erase(it);
    }
    else {
        it++;
    }
}

※ 참고로 list::erase() 함수는 삭제를 한 itertator의 다음 iterator를 반환한다고 합니다.

Posted by 극악해골