您的位置:首页 > 其它

windows平台的内存泄漏检查

2009-12-14 10:24 337 查看
c:

1 #define _CRTDBG_MAP_ALLOC
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
p = (int*)malloc(sizeof(int));

//_CrtDumpMemoryLeaks(); 设置了前面的flag,就不需要再在程序出口调用此函数
return 0;
}
结果:

Detected memory leaks!
Dumping objects ->
d:\documents\visual studio 2008\projects\memory leak check\test\main.c(10) : {60} normal block at 0x004F4A10, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.

c++:

1 #define _CRTDBG_MAP_ALLOC
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() {
int *p;
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
p = new int[4];

//_CrtDumpMemoryLeaks();
return 0;
}
结果:

Detected memory leaks!
Dumping objects ->
d:\documents\visual studio 2008\projects\memory leak check\test\main.cpp(13) : {60} normal block at 0x00504A10, 16 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

mfc:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif程序结束时在Output即输出内存泄漏信息。

如果需要检测某一段内存:

1 #ifdef _DEBUG
2 CMemoryState oldMemState, newMemState, diffMemState; //内存快照
3 #endif
4
5 #ifdef _DEBUG
6 oldMemState.Checkpoint();
7 #endif
8
9 // memory operations

#ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked!\n" );
diffMemState.DumpStatistics();
diffMemState.DumpAllObjectsSince();
}
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: