分类: C/C++
2009-12-16 21:34:45
#include
#include
#define _CRTDBG_MAP_ALLOC
#include
int main()
{
// 设置标志后, 编译器会自动在任何退出的地方调用_CrtDumpMemoryLeaks();输出内存泄漏报告
//_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtMemState s1, s2, s3; // 声明内存状态结构变量
_CrtMemCheckpoint( &s1 ); // 获取第一个内存状态快照
char *p = new char[32];
_CrtMemCheckpoint(&s2); // 获取第二个内存状态快照
// 比较两个内存快照的差异
if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 );// dump 差异结果
// 输出内存泄漏报告,显示在 Output 窗口的 Debug 页中
_CrtDumpMemoryLeaks();
return 0;
}
输出:
_CrtMemDumpStatistics 输出:
0 bytes in 0 Free Blocks.
32 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: 0 bytes.
Total allocations: 32 bytes.
_CrtDumpMemoryLeaks 输出:
Detected memory leaks!
Dumping objects ->
f:\code2005\showmemoryleak\showmemoryleak\showmemoryleak.cpp(15) : {52} normal block at 0x003A5B50, 32 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.