内存泄漏检测工具

1. vs/vc(windows下)自带的检测工具

 将下面的语句加到需要调试的代码中

#define _CRTDBG_MAP_ALLOC  // 像一个开关,去开启一些功能,这个必须放在最上面
#include <stdlib.h>
#include <crtdbg.h>// 接管new操作符  原理: 就是使用新定义的DBG_NEW去替换代码中的new,然后它会将内存管理起来,已经释放的打上标记,如果执行到最后,
// 有内存没有被释放(未被标记的),那就提示出在第几行存在内存泄漏#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK,__FILE__,__LINE__)  // 这个就是检测工具
#define new DBG_NEW#endif // !DBG_NEW
#endif// 这个在代码结束之前,使用打印是否还有为释放的内存// 在代码结束处输出内存泄露信息  // 在调试的输出窗口输出_CrtDumpMemoryLeaks(); //  当执行到这句,如果还有没释放的内存,就打印处在第几行

示例代码:

#define _CRTDBG_MAP_ALLOC  // 像一个开关,去开启一些功能
#include <stdlib.h>
#include <crtdbg.h>#include <iostream>
#include <Windows.h>
#include <string.h>
#include <errno.h>// 接管new操作符  原理: 就是使用新定义的DBG_NEW去替换代码中的new,然后它会将内存管理起来,已经释放的打上标记,如果执行到最后,
// 有内存没有被释放(未被标记的),那就提示出在第几行存在内存泄漏
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK,__FILE__,__LINE__)  // 这个就是检测工具
#define new DBG_NEW#endif // !DBG_NEW
#endif// 我们可以在调试模式下,添加上面的代码,进行内存泄漏的检测, 但是在发布版本时,基本就没有什么问题了,加上会增加容量,所以
// 发布时就将添加的代码都删除掉int main(void)
{// 内存泄漏的例子int* a = new int[10];a = new int;delete a;// 在代码结束处输出内存泄露信息  // 在调试的输出窗口输出_CrtDumpMemoryLeaks(); //  当执行到这句,如果还有没释放的内存,就打印处在第几行system("pause");return 0;
}

上面的代码:发生了内存泄漏-------- a指向了10个int的空间,没有释放,就直接将a又指向了一个新的内存。 

 上面代码,加上之前的调试语句,执行:

如上图,在红圈位置找(输出窗口) 

 

上图就是从输出窗口,找到的内存泄漏的提示信息: 已经给出了哪个文件的第几行,我们只需要找到释放内存即可。 

注意:  以上我们添加的代码都是为了检测是否有内存泄漏,属于调试性的代码, 所以我们在发行的时候应该将加入的为了调试的代码删除掉,否则会占空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/312970.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中的uview组件库丰富的Form 表单用法

目录 基本使用 #Form-item组件说明 #验证规则 #验证规则属性 #uView自带验证规则 #综合实战 #校验错误提示方式 #校验 基本使用 此组件一般是用于表单验证使用&#xff0c;每一个表单域由一个u-form-item组成&#xff0c;表单域中可以放置u-input、u-checkbox、u-radio…

单片机数据发送程序

#include<reg51.h> //包含单片机寄存器的头文件 /***************************************************** 函数功能&#xff1a;向PC发送一个字节数据 ***************************************************/ void Send(unsigned char dat) { SBUFdat; whil…

第6课 用window API捕获麦克风数据并加入队列备用

今天是2024年1月1日&#xff0c;新年的第一缕阳光已经普照大地&#xff0c;祝愿看到这篇文章的所有程序员或程序爱好者都能在新的一年里持之以恒&#xff0c;事业有成。 今天也是我加入CSDN的第4100天&#xff0c;但回过头看一看&#xff0c;这么长的时间也没有在CSDN写下几篇…

【HarmonyOs Arkts笔记】Arkts ForEach循环使用

说明 ForEach循环数组对象时 要指定对象的唯一标识 例如 id&#xff0c;否则只会显示第一个 State tabsList: object[] [{ name: 砍价活动, id: 1, icon: https://php-b2c.likeshop.cn/uploads/images/2022062414322367e6a5479.png },{ name: 拼团活动, id: 2, icon: https:…

KFold解释和代码实现

KFold解释和代码实现 文章目录 一、KFold是什么&#xff1f;二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释 四、总结 一、KFold是什么&#xff1f; 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff1a;每一行表示测…

最优化方法Python计算:无约束优化应用——神经网络回归模型

人类大脑有数百亿个相互连接的神经元&#xff08;如下图(a)所示&#xff09;&#xff0c;这些神经元通过树突从其他神经元接收信息&#xff0c;在细胞体内综合、并变换信息&#xff0c;通过轴突上的突触向其他神经元传递信息。我们在博文《最优化方法Python计算&#xff1a;无约…

认识Linux指令之 “mv” 指令

01.mv指令&#xff08;重要&#xff09; mv命令是move的缩写&#xff0c;可以用来移动文件或者将文件改名&#xff08;move (rename) files&#xff09;&#xff0c;是Linux系统下常用的命令&#xff0c;经常用来备份文件或者目录。 语法: mv [选项] 源文件或目录 目标文件或…

异步处理方案

目录 1.通过promise的链式调用将异步方法变为同步执行 2.使用async及await 3.回调函数方式 4.三种方式对比 5.async及await使用的注意点 1.通过promise的链式调用将异步方法变为同步执行 function get1(){return new Promise((resolve,reject) >{console.log(执行get1接…

快速上手:探索Spring MVC的学习秘籍!

SpringMVC概述 1&#xff0c;SpringMVC入门案例1.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器访问步骤10:修改Controller返回值解…

Goodbye2023, Hello 2024!

2023的所有比赛结束了&#xff0c;以后 xcpc 相关的比赛应该都和我没啥关系了&#xff0c;可能只打打蓝桥天梯了&#xff0c;等到明年的时候估计很多算法的东西也都忘记了吧&#xff0c;彻底退休了。打铁人不配叫退役&#xff0c;也不敢公开这篇文章&#xff0c;只敢在没人看的…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运…

解决相机库CameraView多滤镜拍照错乱的BUG (一) : 复现BUG

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…