<발생한 문제>
map 에서 erase 호출 시 잘못된 메모리 참조가 발생.
<원인>
stl container의 iterator들은 링크드 리스트로 관리되고 있는데,
이들은 함수나 블럭의 시작/종료 시점에서 constructor/destructor 가 자동으로 호출된다.
하지만 goto문이나 inline asm 코드로 예기치 않은 함수나 블록의 종료 시
destructor가 제대로 호출되지 않아 링크드 리스트가 깨져버린다.
(혹자는 try-catch 문에서도 이런 현상이 발생한다고 한다.)
<해결책>
goto문 자제
인라인 어셈을 쓸 경우 stl을 쓰는 코드를 별도의 함수로 리팩토링해서 분리시킨다.
iterator를 가지고 너무 긴 블럭을 실행하지 않는 습관을 들인다.
저도 최근에 이것에 당했었지요 [..]