Visual Studio 2005 Service Pack 1 버그

얼마전 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 )

댓글 남기기