zoukankan      html  css  js  c++  java
  • Windows下内存泄漏检测方法

    Windows下内存泄漏检测方法一
    1、在主程序的cpp文件里加上以下三行,顺序一定不能颠倒
    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    2、在程序退出的时候加上_CrtDumpMemoryLeaks(),如果程序有多个退出的地方,则多个地方要加_CrtDumpMemoryLeaks()比较麻烦,可以在程序的开始处加上_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
    3、经过实验_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF )和_CrtDumpMemoryLeaks()竟然会发现不一样的内存泄漏
    4、_CrtDumpMemoryLeaks()的返回值表示有几处内存泄漏,如果在程序退出是提示程序员有几处内存泄漏肯定会比在Output里提示强的多。可通过如下方式设置:
    void Exit()
    {
        int i = _CrtDumpMemoryLeaks();
        _ASSERT( i == 0);
    }
    在程序进入后设置atexit(Exit);

    Windows下内存泄漏检测方法二
    MFC程序下默认自带内存泄漏检测工具,在Debug模式下会进行内存泄漏检测,不止是MFC下,在VC环境里都有自带的内存泄漏检测技术,在头文件包含如下语句即可:
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    注意这些语句一定要在include的下面,不然会出现错误,另外要将工程的code generation选择多线程。我们会发现在cpp文件中只对new做了映射,如果你在程序中直接使用malloc函数分配内存,调用malloc的文件名和行号是不会被记录下来的。如果这块内存发生了泄漏,MS C-Runtime Library仍然能检测到,但是当输出这块内存块的信息,不会包含分配它的的文件名和行号。统资源比如HANDLE,GDI Object,或是不通过C-Runtime Library分配的内存,比如VARIANT,BSTR的泄漏,它是无法检测到的,这是这种检测法的一个重大的局限性。

    Windows下内存泄漏检测方法四
    Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具,用户可从http://www.codeproject.com/tools/visualleakdetector.asp下载,该软件以库形式与用户的被测工程一起使用,由于VLD是按LGPL(GNU LESSER GENERAL PUBLIC LICENSE)协议对外开源,所以使用VLD是安全的,不必担心版权问题。
    使用VLD:先从网站下载VLD的zip包,当前最高版本是V1.0,解压后得到vld.h、 vldapi.h、vld.lib、vldmt.lib、vldmtdll.lib、dbghelp.dll等文件,把这些所有.h头文件拷贝到VC默认的include目录下,将所有.lib文件拷贝到VC默认的lib目录下,安装工作就完成了。
    使用VLD很简单,只须在包含入口函数的CPP或C文件中把vld.h头文件包含进来即可。该include语句要求放在最前面,如果当前工程定义预编译head文件(如stdafx.h),则放在“#include <stdafx.h>”语句之后就可以了。

  • 相关阅读:
    复制书稿(book) (二分,贪心+dp)
    spark0.9.1集群模式执行graphx測试程序(LiveJournalPageRank,新增Connected Components)
    java 的File文件
    最长公共字序列.cpp
    产品级敏捷开发关键的第一步: 制订版本号公布的节奏
    MySQL优化之——触发器
    Android 打造随意层级树形控件 考验你的数据结构和设计
    【Android】Android聊天机器人实现
    Mysql用户权限管理
    Android经常使用的工具类
  • 原文地址:https://www.cnblogs.com/zjp8023/p/3121295.html
Copyright © 2011-2022 走看看