C++개발자에게 있어서 Memory Leak 은 민감한 문제중 하나이다.
auto_ptr등의 사용방법도 있으나 여기서는 Visual Studio C++에서 지원하는 _CrtSetDbgFlag란 녀석을 소개하고자 한다.
사용 예시)
정상적으로 int를 new/delete할때는 문제가 없으나 delete a; 항목을 주석처리 후 구동후 종료하면 VC 출력창에 아래와 같이 표시된다.
Detected memory leaks! Dumping objects -> {60} normal block at 0x006733D8, 4 bytes long. Data: < > CD CD CD CD Object dump complete. |
해석하면
60번째 생성된 0x006733D8주소(값 : 0xCD CD CD CD)의 4byte 길이의 메모리 누수가 발생했다.
이다.
그럼 60번째로 할당된 변수를 어떻게 찾지?
위 코드에서 주석 처리된 _CrtSetBreakAlloc()에 60이라는 값을 넣으면 구동시 해당 지점에서 VC에서 break를 걸어준다.
그러나 실제 개발시에는 memory leak이 아직 있다는 여부만 확인하는데 많이 쓰이며
누수가 발생한 위치를 찾는것은 처음에 고정적으로 생성되는 부분이 아닌경우가 많으며 대부분 매번 바뀌는 경우가 많다.
'C/C++' 카테고리의 다른 글
sizeof(class) - virtual function (0) | 2014.08.08 |
---|