(转)VS 内存泄漏检测

本文介绍了一种检测非MFC及MFC程序中内存泄漏的方法。通过在stdafx.h中定义_CRTDBG_MAP_ALLOC并包含相关头文件,配合使用DEBUG_NEW宏及CMemoryState类,可以在程序结束时准确地检测到内存泄漏的具体位置。
摘要由CSDN通过智能技术生成

如果你擅长使用Windbg 或者BoundCheck ,呵呵 不用看我这个了,我只是一个刚出发的小菜鸟,不是菜牛,更不是奶牛。

方法:

stdafx.h里面加入:

#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>

_CRTDBG_MAP_ALLOC 定义一定要加上,带上它可以让你明确的看到是哪个文件哪一行出现内存泄漏;

然后在工程的每个cpp文件的#include 部分之后加上:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

即可。

可以做个简单的测试:

在任意的cpp文件中,加入:char *temp = new char[10]; 或者 char *temp = (char *)malloc(10);

然后调试 查看调试信息即可看到内存泄漏信息。

--------------------------------------------------

不想把问题说的多深奥 多严重, 告诫自己要用最简单最通俗的话,解释一些问题,让不懂的人马上就能看懂,

才能说明自己真正理解了。

 

 

非MFC程序可以用以下方法检测内存泄露:

 

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

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

 

2.程序退出前添加下面的函数:

_CrtDumpMemoryLeaks();

 

Debug版本程序运行结束后如有内存泄漏,输出窗口中会显示类似信息:
Detected memory leaks!
Dumping objects ->
e:/microsoft visual studio 8/vc/include/crtdbg.h(1150) : {48} normal block at 0x00382F50, 12 bytes long.
Data: <            > 01 00 00 00 02 00 00 00 03 00 00 00
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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值