应用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
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.