检查内存泄漏不少人也许用过VLD这个方便的工具
早期的vld使用比较不方便,前段时间在试着把工程从vs6迁移到vs2008,顺便重新检查了下内存泄漏相关的,貌似在高版vs中不大好用,而在codeprojcect中似乎还没有更新
之后google了下,发现在这里有新版了(搬新家了?)
用起来比旧版限制少了不少,在编译环境中设置下目录就好,更方便易用了
=====================================================================
早前的例子,使用效果如下:
#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