본문 바로가기

쓰기

<발생한 문제>

map 에서 erase 호출 시 잘못된 메모리 참조가 발생.

 

<원인>

stl container의 iterator들은 링크드 리스트로 관리되고 있는데,

이들은 함수나 블럭의 시작/종료 시점에서 constructor/destructor 가 자동으로 호출된다.

하지만 goto문이나 inline asm 코드로 예기치 않은 함수나 블록의 종료 시

destructor가 제대로 호출되지 않아 링크드 리스트가 깨져버린다.

(혹자는 try-catch 문에서도 이런 현상이 발생한다고 한다.)

 

<해결책>

goto문 자제

인라인 어셈을 쓸 경우 stl을 쓰는 코드를 별도의 함수로 리팩토링해서 분리시킨다.

iterator를 가지고 너무 긴 블럭을 실행하지 않는 습관을 들인다.

 

조회 수 :
7564
등록일 :
2009.10.04
20:31:19
엮인글 :
https://arallab.hided.net/28347/eaf/trackback
게시글 주소 :
https://arallab.hided.net/board_documents/28347

Hide_D

2009.10.04
22:22:06

 저도 최근에 이것에 당했었지요 [..]

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [SVN] AralTrans 0.3 - All Plugins [6] 아랄 2009-10-23 10352
공지 [SVN] AralTrans 0.2 - Full Source [2] 아랄 2008-07-22 16062
12 AralTrans v0.3 Renewal Project [1] file 아랄 2011-04-17 5910
11 [0.2] OnPluginInit에서 MessageBox 출력시 주의! Hide_D 2009-12-11 6814
» STL iterator 사용시 주의사항 [1] 아랄 2009-10-04 7564
9 한 함수에 후킹 포인트를 2개 이상 잡을 수 없습니다. [3] Hide_D 2009-07-20 7702
8 [부정확] 플러그인에 쓰레드를 사용할때 [2] Hide_D 2009-01-07 7456
7 아랄 컨테이너 창이 hidden상태일 수 있으므로 MessageBox 주의! [2] 아랄 2008-11-07 7263
6 파일 다이얼로그를 띄운 후 작업폴더가 바뀌는 현상 [3] 아랄 2008-10-28 7773
5 [소스] 플러그인 개발을 위한 기본 프레임워크 20080810 file whoami 2008-08-10 8614
4 [문서] MultiPlugin 2 - 필터 플러그인 규격 file whoami 2008-07-26 9380
3 [개발환경구축] AralTrans 프로젝트 소스 다운받기 [3] file 아랄 2008-07-24 8171
2 [개발환경구축] TortoiseSVN 설치하기 file 아랄 2008-07-24 7708
1 [문서] 아랄트랜스 0.2 - 플러그인 규격 [5] file 아랄 2008-06-22 9934