VLD(Visual LeakDetector)內存泄露庫的使用

VLD簡介

    由於C/C++語言沒有所謂的垃圾收集器,內存的分配和釋放都需要程序員自己來控制,這會給C/C++程序員帶來一定的困難。當您的程序越來越複雜時,它的內存管理也會變得越來越困難。內存泄漏、內存越界是最常見的內存問題之一。
    內存泄漏如果不是很嚴重的話,在短時間內對程序不會造成太大的影響,而且在進程終止的時候,所有分配的內存都會釋放掉。但是對於長時間運行的程序,其破壞力是驚人的,從性能下降到內存耗盡,甚至會影響到其它程序的正常運行。
    此外,內存問題存在一個共同的特點,它本身並不會有很明顯的現象,當有異常出現時就很難檢查問題的原因所在,這給調試內存問題帶來了很大的難度。
VLD是一款用於VisualC++的免費內存泄漏檢查工具。可以在codeproject.com網站上找到,相比其它的內存泄漏哦給你根據,他在檢查內存泄漏的同事,還具有如下特點:
    1)  可以得到內存泄漏點的調用堆棧,如果可以的話,還可以得到其所在的文件及行號;
    2)  可以得到泄漏內存的完整數據;
    3)  惡意設置內存泄漏報告的級別;
    4)  它以動態庫的形式提供,無需編譯源代碼,只需要很小的改動程序;
    5)  源代碼使用GNU許可發佈,並有詳細的文檔及其註釋。
    從使用的角度講,VLD簡單易用,對於使用者自己的代碼中唯一需要修改的地方是#include VLD的頭文件後正常運行自己的程序就可以發現內存問題。從研究角度上講,如果輸入到VLD源代碼,可以學習到堆內存分片與釋放的原理、內存檢查的原理機器內存操作的常用技巧等。

VLD使用

首先到下面地址下面VLD源代碼包:vld源代碼

下載以後解壓目錄如下:

用VS2015 打開目錄“.\sourceCode\vld\”下的文件“vld_vs14.sln”,打開工程如下:

編譯其中的“vld”工程。

將目錄“.\sourceCode\vld\src\”下的“vld.h”、“vld_def.h”文件拷貝到我們自己的工程目錄下面(使我們工程能包含“vld.h”頭文件)。

將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下的“vld.lib”文件拷貝考我們自己的工程目錄下面(使我們工程能鏈接到這個庫文件)。

將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下的“vld_x86.dll”文件拷貝到我們自己工程目錄下的exe可執行文件相同目錄。

將目錄“.\sourceCode\vld\setup\dbghelp\x86\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下“dbghelp.dll”、“Microsoft.DTfW.DHL.manifest”文件拷貝到我們自己工程目錄下的exe可執行文件相同目錄。

執行完上面操作,所有的配置完成,可以執行程序了。

我這裏寫了一個測試程序如下:

#include "stdafx.h"

#include "vld.h"

int main()
{
	int *p = new int[10];
	//delete[] p;
    return 0;
}

工程配置目錄如下:

可執行文件目錄如下:

當我們註釋掉語句delete[] p時,程序執行完畢,在VS2015的輸出框會提示如下內存泄漏:

如果我們去掉註釋,程序執行完畢,在VS2015的輸出框會提示如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章