关于内存泄漏检测的一些方法
2010-11-29 16:36
459 查看
#define _CRTDBG_MAP_ALLOC //显示内存块类型和内存块分配编号
#include <crtdbg.h>
...........
//在输出窗口查看内存泄漏信息,在程序结束前加入:
_CrtDumpMemoryLeaks(); //退出程序位置固定时
或者
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );// 当退出位置不固定时
运行程序,看输出信息:
output内存泄漏信息结构:
1.内存分配的编号(大括弧中的数字)
2.内存块的类型(普通型、客户端型、CRT型)
3.16进制表示的内存位置
4.内存块的大小
5.前16bytes的内容
可以指定编号,定位内存泄漏的位置,如在程序开始时加上:
_CrtSetBreakAlloc(3442);
再运行则在内存泄漏处停住。
还有一种简单的检测一段代码是否有内存泄漏的方法:
在要检测的代码前加:
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1);
在代码执行后加:
_CrtMemCheckpoint( &s2);
if ( _CrtMemDifference( &s3, &s1, &s2) )
//若执行到此处则说明上面代码有内存泄漏
_CrtMemDumpStatistics( &s3 );
#include <crtdbg.h>
...........
//在输出窗口查看内存泄漏信息,在程序结束前加入:
_CrtDumpMemoryLeaks(); //退出程序位置固定时
或者
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );// 当退出位置不固定时
运行程序,看输出信息:
output内存泄漏信息结构:
1.内存分配的编号(大括弧中的数字)
2.内存块的类型(普通型、客户端型、CRT型)
3.16进制表示的内存位置
4.内存块的大小
5.前16bytes的内容
可以指定编号,定位内存泄漏的位置,如在程序开始时加上:
_CrtSetBreakAlloc(3442);
再运行则在内存泄漏处停住。
还有一种简单的检测一段代码是否有内存泄漏的方法:
在要检测的代码前加:
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1);
在代码执行后加:
_CrtMemCheckpoint( &s2);
if ( _CrtMemDifference( &s3, &s1, &s2) )
//若执行到此处则说明上面代码有内存泄漏
_CrtMemDumpStatistics( &s3 );
相关文章推荐
- 关于内存泄漏检测的一些方法
- 关于深度学习目标检测的一些改进方法
- Android弱网测试中关于网络检测的一些借鉴方法
- 关于slimerjs中sendEvent方法的一些体会
- 关于机器学习中文本处理的一些常用方法
- Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
- 关于NSNumber的一些方法
- 关于getScript方法的一些注意的地方
- 关于测试方法以及测试用例设计的一些总结
- 关于android初学时一些问题的解决方法资料(持续更新)
- 关于BOF改进方法的一些introduction
- 关于数值方法的一些算法解析(3)
- android 关于读取SD卡或者U盘的一些方法
- 关于"多级目录(分类)"的一些想法 ----- 实现方法
- 关于继承的一些知识点和实现方法
- 关于时间格式的一些处理方法
- Win32 下内存泄漏检测的一个方法
- C语言中内存泄漏的检测方法
- 关于单点登陆的一些解决方法
- linux的日志服务器关于屏蔽一些关键字的方法