关于MFC中自带的内存泄漏检测函数DumpStatistics函数,其输出该怎么看

x编程狂魔 2017-04-28 09:42:13
最近在做内存泄漏有关的工作,因为项目的工程比较大,在网上找的内存泄漏工具嵌入到项目中都会有bug,查资料得知MFC自带了检测内存泄漏的函数,其原理是分别定义三个CMemoryState的对象,其中两个对象分别检测当前内存的使用情况,然后对两次内存的使用情况进行对比,再用另一个对象输出是否有内存泄漏,下面是使用该函数进行内存泄漏检测的demo
CMemoryState oldMem, newMem, difMem; 
oldMem.Checkpoint(); // 检测当前的内存使用情况
char* c = new char[6];
TRACE0("1-------------------/n");
oldMem.DumpAllObjectsSince(); // oldMem就检测到这里
TRACE0("2-------------------/n");
newMem.Checkpoint(); // 没有delete[] c
if (difMem.Difference(oldMem, newMem)) // 比较
{
TRACE0("Memory Lack!/n");
}
TRACE0("3-------------------/n");
difMem.DumpStatistics(); // 在Output中打印结果
TRACE0("4-------------------/n");

最后用DumpStatistics进行输出,部分输出结果是如下:
Memory Lack!
3-------------------
0 bytes in 0 Free Blocks.
6 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: 6 bytes.
如何根据该输出来看内存是否有泄漏,泄漏发生在哪里,还是说这个函数的输出只能比较是否有泄漏,而无法输出泄漏具体发生在哪里
...全文
982 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
x编程狂魔 2017-04-28
  • 打赏
  • 举报
回复
项目工程比较大,肯定是有内存泄漏的,所以我主要是想查看程序哪里有内存泄漏,而不是看程序是否有内存泄漏
赵4老师 2017-04-28
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
赵4老师 2017-04-28
  • 打赏
  • 举报
回复
搜“GDI泄露检测”

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧