一. VLD工具概述
Visual Leak Detector(VLD)是一款用於Visual C++的免費的內存泄露檢測工具。他的特點有:可以得到內存泄漏點的調用堆棧,如果可以的話,還可以得到其所在文件及行號; 可以得到泄露內存的完整數據; 可以設置內存泄露報告的級別;並且是開源免費的。
二. VLD下載
http://www.codeproject.com/tools/visualleakdetector.asp
本文后附有vld1.0的工具包,下載解包后就可使用。
三. VLD安裝
方法一:
解壓之后得到vld.h, vldapi.h, vld.lib, vldmt.lib, vldmtdll.lib, dbghelp.dll等文件。將.h文件拷貝到Visual C++的默認include目錄下,將.lib文件拷貝到Visual C++的默認lib目錄下,將dbghelp.dll拷貝到你的程序的運行目錄下,便安裝完成了
方法二:
解壓之后得到vld.h, vldapi.h, vld.lib, vldmt.lib, vldmtdll.lib, dbghelp.dll等文件。將.h文件和.lib文件拷貝到你要檢測的工程文件所在的目錄里(只針對此工程),將dbghelp.dll拷貝到你的程序的運行目錄下。就完成安裝了。
四. VLD使用
在包含入口函數的.cpp文件中包含vld.h就可以了。下面以一個例子進行說明(源程序見附錄):
1. 加入頭文件:
2. 編譯:
3. 在debug方式下運行:查看VC的輸出信息:
內存泄露所在的位置 |
4.查看VC輸出信息:
"WARNING: Visual Leak Detector detected meory leaks!"
5. 如果沒有內存泄露,此輸出的信息為:
"No memory leaks detected"
五. 附錄
1.測試用文件
#include "vld.h"
#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void Function1(char *p)
{
char *pTmp = new char[255];
memset(pTmp, 0x0, 255);
strncpy(pTmp, p, 255);
//delete pTmp;
}
int Function2(void)
{
char acString[] = "this is test!";
Function1(acString);
return 1;
}
void Function3(void)
{
Function2();
}
int main(void)
{
cout << "begin.............." << endl;
Function3();
cout << "end................" << endl;
return 1;
}
2.Vld1.0工具包
3.關於linux的內存泄露,可以使用valgrind工具進行檢測。