2008년 01월 10일
STL 컨테이너 잘못된 사용 -0-
엔진 수업 중에 리소스관리를 위하여 리소스 매니저를 두고 매니저의 자료 구조를 tree로 할려고 STL 맵을 사용하고
리소스매니저 소멸자 호출시에 맵안에 동적으로 할당된 모든 데이타를 삭제하는 형식으로 코딩을 하였는데
매번 뻑이나는 것이었다.
대략 코드는..
for( map<string, IResource*>::iterator iter = mapContainer.begin() ; iter != mapContainer.end() ; ++iter)
{
delete (iter->second);
}
mapContainer.clear();
이렇고 에러 메시지는
Debug Assertion Failed!
Expression:map/set iterator not incrementable
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
이런 경고 문이 나왔다.
삭제 작업을 디버깅 해보니 반복자가 순환하다가 자기를 잃어버리고 뻑이나는 것이었다.
뭔가 계속 뒤져보고 검색도해고 했는데도 찾을 수가 없었다.
리소스에 관련된 코드를 이것저것 막 찾아보니
리소스 소멸자에서 리소스매니저의 맵 원소를 지우는 코드가 있었다 ㅠㅠ
예전에 작성한 코드였는데 제거할때 확실하게 제거 안해서 몇시간 동안 고생을 ㅠㅠ
컨테이너를 쓸때 삭제 작업을 조심해서 해야겠다 ㅠㅠ
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- VC++8.0에서의 vector::erase(), iterator by -A2-
- Iterator in Java, C# by monaca
# by | 2008/01/10 10:10 | 나의 삽질 퍼레이드ㅠㅠ | 트랙백(3) | 덧글(0)






☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : Effexor withdrawal.
Effexor. Effexor combination therapy. Generic effexor. Effexor have any side effects. Effexor xr withdrawal symptoms....more
제목 : Soma next day delievery.
Soma next day delievery. Soma online sales. Soma....more
제목 : Viagra buy.
Buy viagra online. How to buy viagra on line. Buy discount viagra online. Buy viagra....more