Visual Leak Detector是一款免費(fèi)的檢查內(nèi)存泄露的工具。最新的2.1版本可以很好的支持VS2008/2010。
點(diǎn)擊這里下載
安裝后,在VS中設(shè)置Tool->Options 選擇Projects and Solutions中的VC++ Directories,將Visual Leak Detector安裝路徑中的include和lib路徑設(shè)置Include Files和Library Files中,如有必要可以將安裝路徑下bin里的相應(yīng)dll拷貝至System32下。
創(chuàng)建一個(gè)簡(jiǎn)單的工程,其中指針b所指向的內(nèi)存沒(méi)有被正確地釋放。
- void leak()
- {
- int *b = new int[10];
- for (int i = 0; i < 10; ++i)
- {
- b[i] = i;
- }
- }
- int main()
- {
- leak();
- return 0;
- }
include<vld.h>,運(yùn)行就能在output窗口看到效果啦。

輸出的部分主要分為兩塊
Call Stack部分:
是泄露內(nèi)存的調(diào)用堆棧,其中顯示了泄露資源創(chuàng)建的位置,雙擊便可以定位到相應(yīng)的代碼部分。
Data部分:
即使泄露部分的內(nèi)存內(nèi)容。
注:在自己機(jī)器上VS2008上,用了下1.0和1.9b的版本,都出現(xiàn)了不同的問(wèn)題(1.0版本不能定位泄露代碼,1.9b沒(méi)有正確檢查出泄露)。2.1版本運(yùn)行一切正常。
Project Description
Visual Leak Detector is a free, robust, open-source memory leak detection system for Visual C++.
It's pretty easy to use. After installing it, you just need to tell Visual C++ where to find the included header and library file.
Then it can be used with any C/C++ project simply by adding the following line to your code:
#include <vld.h>
When you run your program under the Visual Studio debugger, Visual Leak Detector will output a memory leak report at the end of your debugging session. The leak report includes the full call stack showing how any leaked memory blocks were allocated. Double-click on a line in the call stack to jump to that file and line in the editor window.
It's a very effective way to quickly diagnose, and fix, memory leaks in C/C++ applications.
The main difference between the CRT Debug Library and VLD, is that Visual Leak Detector shows you the complete callstack used for memory allocation has led to the leak.
For example:
---------- Block 1199 at 0x04BE1058: 136 bytes ----------
Call Stack:
d:\Foobar\FooLog.cpp (26): FooLog::getInstance
d:\Foobar\FooMain.cpp (75): FooMain::init
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (578): __tmainCRTStartup
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): WinMainCRTStartup
0x759A3677 (File and line number not available): BaseThreadInitThunk
0x770C9D42 (File and line number not available): RtlInitializeExceptionChain
0x770C9D15 (File and line number not available): RtlInitializeExceptionChain
Data:
9C 33 2D 6B 74 2A 2D 6B C8 11 BE 04 00 00 00 00 .3-kt*-k ........
00 00 00 00 70 14 BB 6C 70 14 BB 6C 00 00 00 00 ....p..l p..l....
00 00 00 00 68 14 BB 6C 68 14 BB 6C 00 00 00 00 ....h..l h..l....
00 00 00 00 6C 14 BB 6C 6C 14 BB 6C 20 12 BE 04 ....l..l l..l....
00 00 00 00 CD 00 CD CD 00 00 00 00 01 CD CD CD ........ ........
68 14 BB 6C 78 33 2D 6B 00 00 00 00 00 00 00 00 h..lx3-k ........
00 00 00 00 01 02 00 00 06 00 00 00 00 00 00 00 ........ ........
00 00 00 00 00 00 00 00 88 11 BE 04 5C 10 BE 04 ........ ....\...
00 00 00 00 20 CD CD CD ........ ........
This software is provided "AS IS" without warranty of any kind.
The project was originally developed by Dan Moulding, but they are no longer supported. Features of version 2.0 are implemented by Arkadiy Shapkin (me).