PDD123 2022-10-20 14:54 采纳率: 0%
浏览 3
已结题

使用CRT调试功能检测内存泄漏,为什么会输出_CrtMemCheckpoint之前就分配的内存?

我专门写了一个MFC程序来调试检测核心模块是否有内存泄漏,核心模块是个静态库。

程序一开始启动就加载了核心模块需要的一切资源,其中有动态分配的内存。

我在stdafx.h文件中加上了CRT内存泄漏调试需要的头文件:

///////////////////////////////////////
//内存调试内存泄漏检测
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
///////////////////////////////////////

加了全局对象:

///////////////////////////////////////
//内存调试内存泄漏检测
_CrtMemState s1, s2, s3;
///////////////////////////////////////

在按钮的功能函数中:


void C内存泄漏调试Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码


	///////////////////////////////////////
	//内存调试内存泄漏检测
	_CrtMemCheckpoint( &s1 );
	///////////////////////////////////////

	//需要检测的方法处

	//////////////////////////////////////////
	//内存调试内存泄漏检测
	_CrtMemCheckpoint( &s2 );
	if ( _CrtMemDifference( &s3, &s1, &s2) ) 
	{
		_CrtMemDumpStatistics( &s3 );
		_CrtDumpMemoryLeaks();
	}
	//////////////////////////////////////////


}

按下按钮就检测两个_CrtMemCheckpoint之间的程序是否造成了内存泄漏。

如果之间什么代码(“需要检测的方法处”)都没有,那当然什么都没有输出!但是只要我加上想要检测的代码,就会输出很多程序一运行就加载资源所分配的内存!根本不是要检测的代码分配的内存!

为什么我会如此确定?因为分配那部分内存的代码只会在加载资源的时候执行,然后资源一直无变化知道程序结束。我甚至设置断点调试过,确实是只在一开始运行过一次!

请问为什么会错误的输出一开始就分配好的内存

 

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月28日
    • 创建了问题 10月20日

    悬赏问题

    • ¥20 蓝牙耳机怎么查看日志
    • ¥15 R语言 拟时序分析降维图如何减少分支
    • ¥15 Fluent齿轮搅油
    • ¥15 八爪鱼爬数据为什么自己停了
    • ¥15 交替优化波束形成和ris反射角使保密速率最大化
    • ¥15 树莓派与pix飞控通信
    • ¥15 自动转发微信群信息到另外一个微信群
    • ¥15 outlook无法配置成功
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统