얼마전 VS2005 서비스팩이 나와서 설치를 해 보았다가 피봤다. 잘 돌아가던 코드가 계속 잘못된 메모리 참조로 죽어 나가는 거다. 내 코드 문제인줄 할고 하루종일 살표 보았는데 결국 아무런 문제를 찾지 못했다.
결국 STL 코드를 들여다 보았더니… M$ 의 버그였다. z군의 PC 에 sp1 을 깔아서 테스트 해 보았더니 아니나 다를까 sp1 을 설치한 후에 같은 증상이 나타나기 시작했다. 아래는 문제의 코드.
|
1 2 3 4 5 6 7 8 9 10 |
#define _HAS_ITERATOR_DEBUGGING 0 #include <vector> int main(int argc, char* argv[]) { std::vector<int> *v = new std::vector<int>; std::vector<int>::iterator it = v->begin(); delete v; } |
저 멀쩡해 보이는 코드가 sp1 을 설치한 후 디버그 모드에서 돌려보면 다운된다. 원인은 sp1 에 STL 에 Debug Iterator Support 관련 코드가 추가되었는데 _HAS_ITERATOR_DEBUGGING 매크로가 검사되지 않은것. 평소에 Debug Iterator Support 를 꺼놓고 쓰는지라 된통 당했다. sp2 에선 고쳐지려나 모르겠다.
관련 논의를 gpgstudy 에서도 한 바 있으니 참고들 하시길.. ( http://gpgstudy.com/forum/viewtopic.php?t=14068 )
