::NPTEAM:: Network Programer Team

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

메모리릭이 걸린 부분 찾기(Memory Leaks)

프로그램을 디버깅하다가 종료를 할경우 output 창에 메모리릭이 발생했다는 창을 종종 보게 된다.

Detected memory leaks!

Dumping objects ->

{10555} normal block at 0x003B7C50, 33 bytes long.

Data: <  2|            > D8 9C 32 7C 0B 00 00 00 10 00 00 00 01 00 00 00

프로그램이 수행되면서 10555번째로 new 를 수행하여 할당된 0x003B7C50 번지에 33바이트짜리 릭이 발생했다는 것이다.

코딩한 부분중에 의심 갈만한 new 가 어림직히 생각 나는경우 쉽게 해결할 수 있지만, 만일 프로젝트가 커진 상황이나,

여러명이 동시에 하나의 소스를 만지고 있을경우에는 이러한 부분을 찾기가 힘들어 진다. 이런상황에서 쉽게 찾을수

있는 방법을 소개한다.

가장 먼저 수행이 되는 파일(stdafx.h 같은곳)에 아래의 내용을 선언해 준다.

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

그리고 가장 먼저 수행되는 코드에 break point 를 건다.

main()
{

  int a; // 이곳에 브포를 걸어 줍니다. 가장 먼저 수행되는 코드..
  int b;
  int* c = new int[100];

  // .. 쭉 코딩된곳..
}

debug 모드로 수행하면 main 바로 아랫 break point 에서 멈추게 된다.

그러면 Watch 창을 열고

이름 부분에 {,,msvcr71d.dll}_crtBreakAlloc

값 부분에 10555 를 넣는다.

그리고 계속 시작(F5)를 누르게 되면 해당되는 new 위치에서 수행이 멈추게 된다.

프로젝트가 단일쓰레드 프로그램이라면 윗 watch 창 이름 부분에

_crtBreakAlloc 을 넣어야 한다.

2006/10/02 23:39 2006/10/02 23:39

맨 위로