(1)在所检测的程序段开始处建立一个CMemoryState对象,调用其成员函数Checkpoint,以取得当前内存使用情况的映射;
(2)在所检测的程序段的末尾处再建立一个CMemoryState对象,调用其成员函数Checkpoint,以取得当前内存使用情况的映射;
(2)再建立第3个CmemoryState对象,调用其成员函数Difference,把第一个CmemoryState对象和第二个CmemoryState对象作为其参数,如果两次内存映射不相同,则该函数返回非零,说明此程序段中有内存漏洞。
下面来看一个例子:
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif
CString s = "This is a frame variable";
// the next object is a heap object
CPerson* p = new CPerson("Smith", "Alan", "581_0215");
#ifdef _DEBUG
newMemState.Checkpoint();
if ( diffMemState.Difference(oldMemState, newMemState ) ){
TRACE("Memory Leaked!//n");
}
#endif
在此例中,首先定义了3个CMemoryState对象。然后在需要检测内存漏洞的代码前后分别调用CMemoryState对象成员函数 Checkpoint,再后调用第3个CMemoryState对象的成员函数Difference来判断是否有内存漏洞,如果有,则使用TRACE宏打印提示消息。
(2)在所检测的程序段的末尾处再建立一个CMemoryState对象,调用其成员函数Checkpoint,以取得当前内存使用情况的映射;
(2)再建立第3个CmemoryState对象,调用其成员函数Difference,把第一个CmemoryState对象和第二个CmemoryState对象作为其参数,如果两次内存映射不相同,则该函数返回非零,说明此程序段中有内存漏洞。
下面来看一个例子:
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif
CString s = "This is a frame variable";
// the next object is a heap object
CPerson* p = new CPerson("Smith", "Alan", "581_0215");
#ifdef _DEBUG
newMemState.Checkpoint();
if ( diffMemState.Difference(oldMemState, newMemState ) ){
TRACE("Memory Leaked!//n");
}
#endif
在此例中,首先定义了3个CMemoryState对象。然后在需要检测内存漏洞的代码前后分别调用CMemoryState对象成员函数 Checkpoint,再后调用第3个CMemoryState对象的成员函数Difference来判断是否有内存漏洞,如果有,则使用TRACE宏打印提示消息。