您的位置:首页 > 其它

VS2005内存泄漏检测方法

2013-10-24 16:14 183 查看
非MFC程序可以用以下方法检测内存泄露:

1.程序开始包含如下定义:

#ifdef _DEBUG

#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)

#else

#define DEBUG_CLIENTBLOCK

#endif // _DEBUG

#define _CRTDBG_MAP_ALLOC

#include <stdlib.h>

#include <crtdbg.h>

#ifdef _DEBUG

#define new DEBUG_CLIENTBLOCK

#endif // _DEBUG

2.程序中添加下面的函数:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

Debug版本程序运行结束后如有内存泄漏,输出窗口中会显示类似信息:

Detected memory leaks!

Dumping objects ->

g:\programs\test\test.cpp(16) : {51} client block at 0x00385C58, subtype 0, 4 bytes long.

Data: < > CD CD CD CD

Object dump complete.

MFC程序内存泄漏检测方法:

1.在 CMyApp 中添加如下三个 CMemoryState 类的成员变量:

#ifdef _DEBUG

protected:

CMemoryState m_msOld, m_msNew, m_msDiff;

#endif // _DEBUG

2.在 CMyApp::InitInstance() 中添加如下代码:

#ifdef _DEBUG

m_msOld.Checkpoint();

#endif // _DEBUG

3.在 CMyApp::ExitInstance() 中添加如下代码:

#ifdef _DEBUG

m_msNew.Checkpoint();

if (m_msDiff.Difference(m_msOld, m_msNew))

{

afxDump<<"\nMemory Leaked :\n";

m_msDiff.DumpStatistics();

afxDump<<"Dump Complete !\n\n";

}

#endif // _DEBUG

Debug版本程序运行结束后如有内存泄漏,输出窗口中会显示类似信息:

Memory Leaked :

0 bytes in 0 Free Blocks.

8 bytes in 1 Normal Blocks.

0 bytes in 0 CRT Blocks.

0 bytes in 0 Ignore Blocks.

0 bytes in 0 Client Blocks.

Largest number used: 8825 bytes.

Total allocations: 47506 bytes.

Dump Complete !

Detected memory leaks!

Dumping objects ->

g:\programs\chat\chatdlg.cpp(120) : {118} normal block at 0x00D98150, 8 bytes long.

Data: < > A8 7F D9 00 01 00 00 00

Object dump complete.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: