본문 바로가기

쓰기

<발생한 문제>

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/90d/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
아랄
10352   2009-10-23 2011-10-19 00:01
공지 [SVN] AralTrans 0.2 - Full Source 2
아랄
16062   2008-07-22 2010-10-31 01:18