C++內(nèi)存泄露的檢測(cè)(一)
一
Visual Studio 調(diào)試器和 C 運(yùn)行時(shí) (CRT) 庫為我們提供了檢測(cè)和識(shí)別內(nèi)存泄漏的有效方法。主要使用函數(shù):_CrtDumpMemoryLeaks();
二 實(shí)例
#define _CRTDBG_MAP_ALLOC //輸出更詳細(xì)的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的內(nèi)容必須放在其他include的前面
#include <vector>
class MyClass

{
private:
int *p;
public:
MyClass()
{
if(p != NULL)
{
p = new int(0);
}
}
~MyClass()
{
if(p != NULL)
{
delete p;
p = NULL;
}
}
};
int _tmain(int argc, _TCHAR* argv[])

{
int *i = NULL; // better for read
i = new int(0);
int *&y = i; // pointer's reference
MyClass *pMyClass = new MyClass();
std::vector<MyClass*> myClasses;
myClasses.push_back(new MyClass());
myClasses.push_back(new MyClass());
_CrtDumpMemoryLeaks();
return 0;
}三說明
1)只對(duì)debug模有用,可以在程序運(yùn)行后在vs的ide的output的最后看到泄露的檢測(cè)結(jié)果。
2)可以檢測(cè)系統(tǒng)類型,自定義類型和stl 容器。
3)#define _CRTDBG_MAP_ALLOC //包含該宏定義輸出更詳細(xì)的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的內(nèi)容必須放在其他include的前面,否則可能使上面定義的宏失效。
4)如果程序有統(tǒng)一的退出口,則在退出時(shí)調(diào)用_CrtDumpMemoryLeaks();
5)如果程序有多個(gè)出口,則可以在程序開始處包含下面的調(diào)用:_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );這條語句無論程序在什么地方退出都會(huì)自動(dòng)調(diào)用 _CrtDumpMemoryLeaks。
四 更多(更多的API和demo的下載)
http://msdn2.microsoft.com/zh-cn/library/fxszt639(VS.80).aspx
五 其他同類文章
http://m.shnenglu.com/zhouhuishine/archive/2008/01/22/41609.html
posted on 2007-07-19 16:39 夢(mèng)在天涯 閱讀(4656) 評(píng)論(3) 編輯 收藏 引用 所屬分類: CPlusPlus

