MFC提供了检查内存的类CmemoryState,我们就利用这个类的对象来检查内存泄露,以下是具体步骤:
一:在你所检测的程序段的开始处建立一个 CmemoryState 对象,调用其成员函数Checkpoint,以取得当前内存使用情况的快照;
二:在你所检测的程序段的末尾处再建立一个 CmemoryState 对象,调用其成员函数Checkpoint ,以取得当前内存使用情况的快照;
三: 再建立第三个 CmemoryState 对象,调用其成员函数Difference,把第一个CmemoryState 对象和第二个CmemeoryState 对象作为其参数.,如果两次内存快 照不相同,则该函数返回非零,说明此程序 段中有内存漏洞。
下面举个简单的例子:
CString *pstr = new CString; int *p = new int(10);
上面new了两次,但是都没有delete。然后你想检查内存,那么我们就按照上面步骤所讲来做。
#ifdef _DEBUG CMemoryState oldMemState, newMemState, diffMemState; oldMemState.Checkpoint(); #endif
CString *pstr = new CString; int *p = new int(10);
#ifdef _DEBUG newMemState.Checkpoint(); if( diffMemState.Difference( oldMemState, newMemState ) ) { TRACE( "Memory leaked!\n" ); } #endif
在调试的状态下可以观察diffMemState的值,iCount下可以看到new的内存几个没有delete,iSize下面可以看到申请的多少内存没有释放。
上例中,iConut下面的值为2,delete下面的值为14。
自己揣摩,如果有错误的地方希望指正,新手勿喷 |