ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MFC 메모리 릭 체크시 유용한 방법
    dev/C,C++ 2016. 10. 17. 15:00

    출처 : http://egloos.zum.com/sungod0/v/3561771


    MFC 사용시,


    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif


    프로그램이 종료 되었을때 누수된 메모리를 할당하는 부분의 소스 코드와 라인 수를 출력


    Detected memory leaks!

    Dumping objects ->

    d:\sample\sample.cpp(35) : {48} client block at 0x003739D0, subtype 0, 4 bytes long.

     Data: <(   > 28 00 00 00 

    d:\sample\sample.cpp(34) : {47} client block at 0x00373990, subtype 0, 4 bytes long.

     Data: <    > 1E 00 00 00 

    Object dump complete.


    sample.cpp 화일의 35번째 라인에서 할당된 메모리가 누수

    48번째로 할당된 메모리

    메모리 주소는 0x003739d0,

    4Byte가 누수


    MFC 미사용시,


    #if !defined(_AFXDLL)

       #include <windows.h>

       #include <crtdbg.h>

       #if defined(DEBUG) | defined(_DEBUG)

          #if !defined(DEBUG_NEW)

             #define DEBUG_NEW new(_CLIENT_BLOCK, __FILE__, __LINE__)

          #endif

       #endif

    #endif

    malloc 을 이용한 메모리 할당시,


    // 헤더 화일

    #define DEBUG_MALLOC(size) _malloc_dbg(size, _NORMAL_BLOCK, __FILE__ , __LINE__) 


    // 소스 코드

    #define malloc DEBUG_MALLOC



    memery leak detector 설정


    #include <crtdbg.h>


    // 프로그램 시작

    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );


    // 프로그램 종료

     _CrtDumpMemoryLeaks();

Designed by Tistory.