출처는 밑에 있습니다.


vector에 저장된 요소를 루프를 돌며 일정 부분을 삭제하는 루틴은 쓰이는 곳이 많다.

 

보통 아래와 같이 이터레이터로 루프를 돌린다.

 

vector≪MyObj*≫ lists_;

vector≪MyObj*≫::iterator itr;

for ( itr = lists_.begin() ; itr != lists_.end() ; itr++ )

{

 MyObj* obj = *itr;

if ( 조건 )

{

 delete obj;obj=NULL;

lists_.erase(itr);

}

}

 

그런데, 그전까지 잘 동작하던 위 코드가 Visual studio 2008에서 작성할때는 때때로 오류가 발생하였다.

항상 발생하는 것은 아니고 때때로...

구글링을 통해서 해결책을 찾은것은 erase 결과로 이터레이터를 받는 식으로 고치는 것이다.

 

for ( itr = lists_.begin() ; itr != lists_.end() ; )

{

 MyObj* obj = *itr;

if ( 조건 )

{

 delete obj;obj=NULL;

itr = lists_.erase(itr);

}

else

 itr++;

}

 

위와 같이 하니까 때때로 발생하던 런타임 오류가 없어졌다...

이거때문에 며칠간 삽질 엄청 한거 생각하면

Posted by 우주여행가
,