windows平台的内存泄漏检查
c:
2 #include <stdlib.h>
3 #include <crtdbg.h>
4 //以上的顺序必须严格如此
5
6 int main() {
7 int *p;
8 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //程序结束时自动调用_CrtDumpMemoryLeaks()
9
10 p = (int*)malloc(sizeof(int));
11
12 //_CrtDumpMemoryLeaks(); 设置了前面的flag,就不需要再在程序出口调用此函数
13 return 0;
14 }
15
结果:
2 Dumping objects ->
3 d:\documents\visual studio 2008\projects\memory leak check\test\main.c(10) : {60} normal block at 0x004F4A10, 4 bytes long.
4 Data: < > CD CD CD CD
5 Object dump complete.
c++:
2 #include <stdlib.h>
3 #include <crtdbg.h>
4
5 //覆盖掉默认的new操作符
6 #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
7 #define new DEBUG_NEW
8
9 int main() {
10 int *p;
11 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
12 p = new int[4];
13
14 //_CrtDumpMemoryLeaks();
15 return 0;
16 }
17
结果:
2 Dumping objects ->
3 d:\documents\visual studio 2008\projects\memory leak check\test\main.cpp(13) : {60} normal block at 0x00504A10, 16 bytes long.
4 Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
5 Object dump complete.
mfc:
2 #define new DEBUG_NEW
3 #endif
程序结束时在Output即输出内存泄漏信息。
如果需要检测某一段内存:
2 CMemoryState oldMemState, newMemState, diffMemState; //内存快照
3 #endif
4
5 #ifdef _DEBUG
6 oldMemState.Checkpoint();
7 #endif
8
9 // memory operations
10
11 #ifdef _DEBUG
12 newMemState.Checkpoint();
13 if( diffMemState.Difference( oldMemState, newMemState ) )
14 {
15 TRACE( "Memory leaked!\n" );
16 diffMemState.DumpStatistics();
17 diffMemState.DumpAllObjectsSince();
18 }
19 #endif
参考:
1. 这篇帖子解决在c++中如何显示行号,即覆盖原new操作符
http://www.gamedev.net/community/forums/topic.asp?topic_id=484434
2. MSDN: Memory Leak Detection Enabling
http://msdn.microsoft.com/en-us/library/e5ewb1h3%28VS.80%29.aspx
3. MSDN: _CRTDBG_MAP_ALLOC
http://msdn.microsoft.com/en-us/library/10t349zs.aspx
4. codeguru: Visual C++ Debugging: How to manage memory leaks?
http://www.codeguru.com/forum/showthread.php?t=312742
5. MSDN: MFC Debugging Techniques
http://msdn.microsoft.com/en-us/library/7sx52ww7%28VS.80%29.aspx
5.1. MSDN: Memory Leak Detection in MFC
http://msdn.microsoft.com/en-us/library/c99kz476%28VS.80%29.aspx
5.1.1. MSDN: Memory Allocation Tracking
http://msdn.microsoft.com/en-us/library/kxx6e7z6%28VS.80%29.aspx
浙公网安备 33010602011771号