c++如何解决内存泄漏

Linxu

Linux系统下解决内存泄漏可以使用valgrind工具。

下载valgrind

sudo apt-get install valgrind

Linux下使用valgrind

 g++ -g -o app test.cpp valgrind --leak-check=full ./app
代码如下
#include<iostream>
using namesapce std;
int main()
{int i = 0;int * intV = new int[10];for(int i = 0; i < 10; i++){intV[i] = i;}
​for(int i = 0; i < 10; i++) {cout << intV[i] <<endl;}
​delete [] intV;
}

valgrind打印的泄漏信息

==5155== Memcheck, a memory error detector
==5155== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5155== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==5155== Command: ./app
==5155== 
==5155== 
==5155== HEAP SUMMARY:
==5155==     in use at exit: 40 bytes in 1 blocks
==5155==   total heap usage: 3 allocs, 2 frees, 76,840 bytes allocated
==5155== 
==5155== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==5155==    at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5155==    by 0x1091E5: main (test.cpp:7)
==5155== 
==5155== LEAK SUMMARY:
==5155==    definitely lost: 40 bytes in 1 blocks
==5155==    indirectly lost: 0 bytes in 0 blocks
==5155==      possibly lost: 0 bytes in 0 blocks
==5155==    still reachable: 0 bytes in 0 blocks
==5155==         suppressed: 0 bytes in 0 blocks
==5155== 
==5155== For lists of detected and suppressed errors, rerun with: -s
==5155== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

正常信息

==5719== 
==5719== HEAP SUMMARY:
==5719==     in use at exit: 0 bytes in 0 blocks
==5719==   total heap usage: 3 allocs, 3 frees, 73,768 bytes allocated
==5719== 
==5719== All heap blocks were freed -- no leaks are possible
==5719== 
==5719== For lists of detected and suppressed errors, rerun with: -s
==5719== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Windows

windows下qt可以使用qt自带的一个Leaker插件,安装后即可使用,但是需要进行收费,本文主要介绍VLD方式,通过vs进行内存检测。

首先下载VLD安装包

到GitHub下载最新的VLD程序Release v2.5.1 · KindDragon/vld (github.com)。

会自动适配到本地安装的vs中,之后将里面的lib,include文件打包之后,把bin目录下的dll放到运行的bin目录下,之后配置头文件和库目录,加入#include "vld.h"头文件,程序启动会打印

Visual Leak Detector read settings from: D:\Program Files\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.

代码如下:

#include <iostream>
using namespace std;#include "vld.h"void test()
{char* pChar = new char[20];//delete[] pChar;return;
}int main()
{test();return 0;
}

如果存在内存泄漏,程序会输出

WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00000000EDC96DE0: 20 bytes ----------Leak Hash: 0x5A484AE6, Count: 1, Total 20 bytesCall Stack (TID 6140):ucrtbased.dll!malloc()f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (16): LeetCode.exe!operator new[]()d:\visualprograme\leetcode\leetcode\test2.cpp (8): LeetCode.exe!test() + 0xA bytesd:\visualprograme\leetcode\leetcode\test2.cpp (16): LeetCode.exe!main()f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (75): LeetCode.exe!invoke_main()f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (264): LeetCode.exe!__scrt_common_main_seh() + 0x5 bytesf:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (309): LeetCode.exe!__scrt_common_main()f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp (17): LeetCode.exe!mainCRTStartup()KERNEL32.DLL!BaseThreadInitThunk() + 0x14 bytesntdll.dll!RtlUserThreadStart() + 0x21 bytesData:CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........CD CD CD CD                                                  ........ ........
​
Visual Leak Detector detected 1 memory leak (72 bytes).
Largest number used: 72 bytes.
Total allocations: 72 bytes.
Visual Leak Detector is now exiting.

如果不存在内存泄漏,则会打印如下信息

No memory leaks detected.
Visual Leak Detector is now exiting.

还可以将其输出到文件中

vld.ini参数设置说明 默认读取的是安装目录下的vld.ini 文件,当exe所在目录下也有vld.ini文件时会优先读取这份配置。 VLD:选择VLD的打开与关闭。在Debug模式下运行,关闭以后会有一行VLD关闭的提示信息。默认为 on。 AggregateDuplicates:设置为 yes 时,相同地方产生内存泄漏只输出一次,但是会统计发生的次数。默认是 no 。 MaxDataDump:输出的dump数据个数,默认为 256。 MaxTraceFrames:输出的调用栈的层数。默认是 64。 ReportEncoding :report 文件的编码格式,可选有 ascii, unicode,默认是 ascii 。 ReportFile :report 文件的路径。默认是 “.\memory_leak_report.txt” ReportTo :可选有 debugger, file, both,debugger 表示输出到 debug模式下的输出窗口;file 表示只输出到文件中; both顾名思义,全都都输出。默认是 debugger 。 备注:怎么让VLD的文件输出到一个独立的文件中? vld.ini参数设置说明 答:配置 ReportFile = .\你的程序名称_vldLog.txt 和 ReportTo = both 即可。

配置好路径之后

会在当前目录生成文件

 

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

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

相关文章

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…

kafka--kafka基础概念-ISR详解

kafka基础概念-ISR详解 主要是讲 主 往 从同步中的问题 当绿色P1接收到写入的数据&#xff0c;要同步到紫色的P1S1和P1S2 如何保证一致性呢&#xff1f; 使用In Sync Replicas 也就是ISR概念 为什么不一致的&#xff1f; 因为P1S1同步数据 可能花费 50ms P1S2可能花费60ms…

【网络架构】华为hw交换机网络高可用网络架构拓扑图以及配置

一、网络拓扑 1.网络架构 核心层:接入网络----路由器 汇聚层:vlan间通信 创建vlan ---什么是vlan:虚拟局域网,在大型平面网络中,为了实现广播控制引入了vlan,可以根据功能或者部门等创建vlan,再把相关的端口加入到vlan.为了实现不用交换机上的相同vlan通信,需要配置中继,为了…

解决访问Github出现的Couldn‘t connect to server错误

文章目录 前言原因分析以及解决办法原因分析解决办法 参考 前言 在Github上面克隆代码仓库出现Failed to connect to 127.0.0.1 port 1080 after 2063 ms: Couldnt connect to server、Failed to connect to github.com port 443 after 21083 ms: Couldnt connect to server等…

贝叶斯公式

一、贝叶斯公式 贝叶斯公式是一种用于概率推断的重要数学工具&#xff0c;它描述了在观测到新信息后如何更新关于某个事件的概率分布。贝叶斯公式的一般形式如下&#xff1a; P(A∣B)P(B∣A)⋅P(A) ​/ P(B) 其中&#xff1a; P(A∣B) 表示在给定观测到事件 B 后&#xff0c…

【MySQL】好好学习一下InnoDB中的页

文章目录 一. 前言二. 从宏观层面看页三. 页的基本内容3.1 页的数据结构3.2 用户空间内的数据行结构3.3 页目录 四. 问题集4.1 索引 和 数据页 有什么区别4.2 页的大小是什么决定的4.3 页的大小对哪些情况有影响4.4 一般情况下说的链表有哪几个4.5 如果页的空间满了怎么办4.6 如…

CentOS 7 安装MySQL8.0.33

一、查看 CentOS 版本 要查看当前 CentOS 版本&#xff0c;你可以执行以下命令&#xff1a; cat /etc/centos-release 该命令将显示当前 CentOS 的版本信息&#xff0c;例如&#xff1a; CentOS Linux release 7.9.2009 (Core) 在这个示例中&#xff0c;CentOS 版本为 7.…

【Python从入门到进阶】32、bs4的基本使用

接上篇《31、使用JsonPath解析淘票票网站地区接口数据》 上一篇我们介绍了如何使用JSONPath来解析淘票票网站的地区接口数据&#xff0c;本篇我们来学习BeautifulSoup的基本概念&#xff0c;以及bs4的基本使用。 一、BeautifulSoup简介 1、bs4基本概念 BeautifulSoup是一个P…

KUST_LI计算机视觉实验室服务器安装与管理

第一步&#xff1a;安装 Linux-Ubuntu系统 系统语言设置为英文 ENGLISH&#xff0c;防止系统 BUG&#xff1b;选择-清除整个磁盘并安装系统&#xff1b;设置用户名和密码&#xff0c;实验室统一其余全部默认设置 开机后设置磁盘挂载 在系统设置中找到 desk 打开&#xff0c;…

动物IT

动物是地球上最丰富和多样化的生物群体之一。它们包括鱼类、鸟类、爬行动物、两栖动物和哺乳动物等各种类型。动物在地球上有着不同的生态角色和生活习性。 动物对于维持生态平衡和生态系统的稳定性至关重要。它们在食物链中扮演着重要的角色&#xff0c;通过捕食和被捕食来保…

轻松搭建书店小程序

在现今数字化时代&#xff0c;拥有一个自己的小程序成为了许多企业和个人的追求。而对于书店经营者来说&#xff0c;拥有一个能够提供在线购书服务的小程序将有助于吸引更多的读者&#xff0c;并提升销售额。本文将为您介绍如何轻松搭建书店小程序&#xff0c;并将其成功上线。…

第7步---MySQL的视图操作和

第7步---MySQL的视图操作 虚拟表。保存的只是视图的定义。不存放真实的数据&#xff0c;数据还是在原先的表中。 好处是方便和简化代码以及安全。 1.视图创建 数据准备 -- 创建表的测试数据 create table dept(deptno int primary key,dname varchar(20),loc varchar(20) ); …

Android学习之路(8) Activity

本节引言&#xff1a; 本节开始讲解Android的四大组件之一的Activity(活动)&#xff0c;先来看下官方对于Activity的介绍&#xff1a; 移动应用体验与桌面体验的不同之处在于&#xff0c;用户与应用的互动并不总是在同一位置开始&#xff0c;而是经常以不确定的方式开始。例如&…

项目管理实战笔记1:项目管理常识

序 看了下极客时间的《项目管理实战》&#xff0c;觉得跟之前学习PMP的标准资料还是有所侧重。重新整理下&#xff0c;相比书上繁杂的知识&#xff0c;这个更通俗易懂。 1 角色转换&#xff1a;三大误区 误区1&#xff1a;事必躬亲 自己做事情是可控的&#xff0c;做项目依赖…

【脚踢数据结构】图(纯享版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

Python Django 模型概述与应用

今天来为大家介绍 Django 框架的模型部分&#xff0c;模型是真实数据的简单明确的描述&#xff0c;它包含了储存的数据所必要的字段和行为&#xff0c;Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型&#xff0c;然后其它的杂七杂八代码你都不用关心&#xff0c;…

“Spring管理JavaBean的过程及Bean的生命周期“

目录 引言1.弹簧容器2. Bean的生命周期2.1 配置javaBean2.2. 解析Bean的定义2.3 检查是否需要添加自己的功能2.4 初始化2.5 实现Aware接口2.6 扩展2.7. 销毁 3. 单例模式和原型模式3.1. 单例模式3.2. 原型模式 4. 总结 引言 Spring框架是一个非常流行的Java应用程序框架&#…

【前端】快速掌握HTML+CSS核心知识点

文章目录 1.HTML核心基础知识1.1.编写第一个HTML网页1.2.超链接a标签和路径1.3.图像img标签的用法1.4.表格table标签用法1.5.列表ul、ol、dl标签用法1.6.表单form标签用法1.7.区块标签和行内标签用法 2.CSS核心基础知识2.1.CSS标签选择器viewport布局2.2.CSS样式的几种写法2.3.…

【ES6】—解构赋值

一、定义 解构赋值&#xff1a;解构赋值就是一种模式的匹配&#xff0c;只要等号两边的模式完全相同的&#xff0c;那么左边的变量就会被赋值对应右边的值 二、数组的解构赋值 PS&#xff1a;数组解构赋值时&#xff0c;是通过索引的唯一性赋值的 1. 一维数组解构赋值 (1)…

大数据从入门到放弃——浅谈数据架构的前世今生

文章目录 1. 背景2. 数据的定义及分类2.1 数据的定义2.2 数据的分类2.3 数据和信息的区别 3. 数据的作用4. 数据的那些美好时代4.1 人脑时代4.2 文件时代4.3 数据库时代4.3.1 大服务器时代4.3.2 读写分离时代4.4 数据库的分布式时代4.5 云端时代 5. 数据的未来 1. 背景 随着云时…