C/C++检测内存泄漏的工具 vld Visual Leak Detector223 的使用方法和sample示例

你看到的这个文章来自于http://www.cnblogs.com/ayanmw

这类的工具有 比如 :LeakDiag leakfinder "Visual Leak Detector"  

vld可以从http://vld.codeplex.com/releases/view/82311 现在最新版本,包括src源代码。

安装好以后,他会提示 要求添加 dll 到环境变量中去。

使用 vld 的方法为:在自己的代码中 添加 vld 的头文件,以及 lib 声明,其会自动去环境变量path中搜索 vld_x86.dll 或vld_x64.dll ,然后 调用其中的方法的。

头文件有俩:vld_def.h 和 vld.h,只需要包含后者(其会包含前者的)

贴下他们的源码、

vld_def.h代码
vld.h

这 vld 并没有提供sample,提供的src源代码 也只是 编译成 dll的。

于是 我自己写了一个工程vldTest(用 vs2010 建立 console的 普通 的win32 程序)

下面就是测试的代码,lib和h文件 的路径 你自己看着办就行。vld.h里面也有 这个 包括 pragma lib的,注释掉 或者  将 lib添加到 path 还是 Library_Path什么环境变量中去。

下面的代码 功能是 写一个 内存泄漏 的程序,说白了,就是分配内存,但是没有释放掉。虽然程序结束会释放掉,但是如果不结束 一直 不释放的,就是内存泄漏了。下面程序 有2个内存泄漏,但是 vld 检测是3个。对了 编写成 DEBUG模式,才会启用 vld的功能。原因 看 vld.h的条件编译。

复制代码
// vldTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "..\include\vld.h"

#pragma comment(lib,"../lib/Win32/vld.lib")



class MyTest
{
public:
    MyTest(const char *szName)
    {
        // The following is the second resulting leak
        m_pszName = strdup(szName);
    }
    ~MyTest()
    {
        if (m_pszName != NULL)
            free(m_pszName);
        m_pszName = NULL;
    }
protected:
    char *m_pszName;
};



int _tmain(int argc, _TCHAR* argv[])
{
    int * ptrInt;
    ptrInt=(int*)malloc(10);
    memset(ptrInt,0xed,10);
    printf("0x%08x\n",*ptrInt);
    //VLDEnable();
    //VLDRestore();
    //VLDGlobalEnable();
    

    // This is the "main" leak
    MyTest *pTest = new MyTest("This is an example");
    //VLDReportLeaks();
    //VLDGetLeaksCount ();
    

    return 0;
}
复制代码

 

运行效果如图:(为了显示全部,去掉了MyTest 那句话)。

如果 加上 free(ptrInt); 就没有泄漏了。如图

除了 0xedededed 这句话 其他都是 vld 的输出。如果发布成 release,默认 不会 调用 vld了。

 

程序参考了

http://topic.csdn.net/t/20021216/13/1265024.html

http://www.codeproject.com/Articles/3134/Memory-Leak-and-Exception-Trace-CRT-and-COM-Leaks

转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值