VS2005内存泄漏检测方法

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

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

                #ifdef _DEBUG

                       #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)

               #else

                       #define DEBUG_CLIENTBLOCK

               #endif   // _DEBUG

               #define _CRTDBG_MAP_ALLOC

                #include

              #include

              #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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值