应用CMemoryState动态检测内存泄漏

使用MFC开发,当程序退出时,Visual Studio会在输出窗口提供关于内存泄漏信息的提示,但也仅仅是在退出后才给出提示,如果想在运行过程中在输出窗口看到关于当前内存泄漏的信息,就需要借助MFC类CMemoryState.

这个类在afx.h头文件中定义在Debug模式下,因此使用这个类也需要在Debug模式下。

CMemoryState类的主要成员函数如下:

    .Checkpoint 取得当前内存状态的一个快照或“检查点” 
    .Difference 计算两个CMemoryState类型的对象之间的差异
    .DumpAllObjectsSince 从前一个检查点开始转储所有分配对象的摘要
    .DumpStatistics 打印一个CMemoryState 对象的内存分配统计信息

 

范例(检测内存泄漏):

#ifdef _DEBUG

    CMemoryState  msStart, msEnd, msDiff;
    msStart.Checkpoint();

    
int *pNum = new int;
    
//delete pNum;

    msEnd.Checkpoint();

    
if( msDiff.Difference( msStart, msEnd ) )
    {
        
//检测到内存泄漏

        
//输出内存泄漏的信息
        msDiff.DumpAllObjectsSince();
    }

#endif

运行时在输出窗口显示:

Dumping objects ->
{90} normal block at 0x00EB2D58, 4 bytes long.
 Data: <    > CD CD CD CD
Object dump complete.

 

posted @ 2009-05-19 16:21  孤竹君  阅读(875)  评论(0编辑  收藏  举报