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…

R语言dplyr包select函数删除dataframe数据中包含指定字符串内容的数据列(drop columns in dataframe)

问题描述 参考链接 我有一个数据框&#xff0c;想删除列名包含“Pval”的列 实现方法 a_new <- select(data, -contains(Pval))大功告成。

【网络架构】华为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.…

LeetCode 41题:缺失的第一个正数

目录 题目 思路 代码 题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3示例 2&#xff…

【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;并将其成功上线。…

springboot整合kafka-笔记

springboot整合kafka-笔记 配置pom.xml 这里我的springboot版本是2.3.8.RELEASE&#xff0c;使用的kafka-mq的版本是2.12 <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>s…

第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;送给自己和读者的…

使用 takeUntil 操作符管理 Angular 组件的订阅

在 Rxjs 中&#xff0c;可以使用 takeUntil 来控制另外一个 Observable 对象数据的产生。使用 takeUntil&#xff0c;上游的数据直接转手给下游&#xff0c;直到takeUntil的参数吐出一个数据或者完结。 就像一个水龙头开关&#xff0c;一开始是打开的状态&#xff0c;上游的数…

Jtti:Ubuntu怎么限制指定端口和IP访问

在 Ubuntu 系统中&#xff0c;可以使用防火墙规则来限制特定的端口和IP访问。常用的防火墙管理工具是 iptables&#xff0c;以下是使用 iptables 来限制指定端口和IP访问的步骤&#xff1a; 安装 iptables&#xff1a; 如果系统中没有安装 iptables&#xff0c;可以使用以下命…