检测内存泄露

  VS的C Run-Time Libraries支持内存调试。对于MFC程序,VS自动添加

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

  在cpp文件开头,出现内存泄露时就能报告相应的错误信息。

 

  对于非MFC程序,主要工具是调试器和C Run-Time Libraries的debug heap函数。

  要使用这些函数,需设置如下步骤:

  • 使用程序调试版本,C运行时刻函数库也选择调试版本;

 

  • 在程序中添加设置代码,stdafx.h开头是个合适的位置。
    #ifdef _DEBUG
    #define _CRTDBG_MAP_ALLOC    
    #include <stdlib.h>
    #include <crtdbg.h>
    #define  DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)    

    #endif

    crtdbg.h:通过include此文件将 malloc 和 new 替换为他们的debug版本, _malloc_dbg和 _free_dbg,跟踪内存的分配和释放。

    _CRTDBG_MAP_ALLOC:将CRT的heap函数替换为对应的debug版本,设置此参数能使内存泄露检查提供更多信息。

 

  • 在程序开头添加:
    #ifdef _DEBUG
        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF      // 启动堆分配检查
            | _CRTDBG_LEAK_CHECK_DF );            // 程序结束时__CrtDumpMemoryLeaks自动调用
    #endif

     


    附相关链接,详细叙述了调试堆方法:

    1、MSDN中关于检测内存泄露的说明:http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=VS.80%29.aspx

    2、CRT调试堆:http://blog.csdn.net/ugg/article/details/1585639

  

posted on 2012-04-11 13:31  海茉莉  阅读(187)  评论(0编辑  收藏  举报