关于内存泄漏检测工具VLD(Visual Leak Detector)

 


检查内存泄漏不少人也许用过VLD这个方便的工具

http://www.codeproject.com/KB/applications/visualleakdetector.aspx?fid=162023&df=90&mpp=25&sort=Position&noise=3&view=Quick&select=2597831

早期的vld使用比较不方便,前段时间在试着把工程从vs6迁移到vs2008,顺便重新检查了下内存泄漏相关的,貌似在高版vs中不大好用,而在codeprojcect中似乎还没有更新


之后google了下,发现在这里有新版了(搬新家了?)

http://vld.codeplex.com/


用起来比旧版限制少了不少,在编译环境中设置下目录就好,更方便易用了

 

=====================================================================

 

 

早前的例子,使用效果如下:

 

#include <vld.h>

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

// =====================================================================================================================
// =======================================================================================================================

void Fun(void)
{
 //~~~~~~~~~~~~~
 int *p = new int;
 //~~~~~~~~~~~~~
}

// =====================================================================================================================
// =======================================================================================================================
int main()
{
 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

 //~~~~~~~~~~~~~~~~~~~~
 int *pArr = new int[32];
 //~~~~~~~~~~~~~~~~~~~~

 Fun();
 return 0;
}


 

 

 

在F5程序正常结束后,可以看到


quote:
--------------------------------------------------------------------------------

WARNING: Visual Leak Detector detected memory leaks!
---------- Block 47 at 0x003C5CD0: 4 bytes ----------
Call Stack:
E:\prj\CSDN\VldDemo\VldDemo.cpp (13): Fun
E:\prj\CSDN\VldDemo\VldDemo.cpp (28): main
crt0.c (206): mainCRTStartup
0x7C816FD7 (File and line number not available): RegisterWaitForInputIdle
Data:
CD CD CD CD ........ ........

---------- Block 46 at 0x003C5C08: 128 bytes ----------
Call Stack:
E:\prj\CSDN\VldDemo\VldDemo.cpp (24): main
crt0.c (206): mainCRTStartup
0x7C816FD7 (File and line number not available): RegisterWaitForInputIdle
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........

Visual Leak Detector detected 2 memory leaks.
Visual Leak Detector is now exiting.
Detected memory leaks!
Dumping objects ->
{47} normal block at 0x003C5CD0, 4 bytes long.
Data: < > CD CD CD CD
{46} normal block at 0x003C5C08, 128 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
The thread 0x5E4 has exited with code 0 (0x0).

 

 

早期找到一些说明文
http://blog.csdn.net/dofty/article/details/1190606

若使用STLport,内存池会被认为是内存泄露,可以define _STLP_USE_MALLOC/_STLP_USE_NEWALLOC使检测更准确
参:
http://www.stlport.org/doc/README.VC++.html

 


 

你可能感兴趣的:(关于内存泄漏检测工具VLD(Visual Leak Detector))