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.rhkb.cn/news/98702.html

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

相关文章

React+Typescript使用接口泛型处理props

好 刚讲完组件 那么 这次 我们来看一下 数据传递的 props 还是上文的案例 例如 我们想将 title 传给Hello组件 之前我们可以直接这样 以一个标签属性的形式传过去 而我们在子组件中 这样去使用 但现在 我们从编辑器中都可以看出 这种写法已经不行了 然后 我们将 hello 组件…

STM32编程Printf函数语法

Printf函数语法 函数声明 printf 函数的声明如下&#xff1a; // C99 前 int printf( const char *format, ... ); // C99 起 int printf( const char *restrict format, ... );参数列表 format – 是格式控制字符串&#xff0c;包含了两种类型的对象&#xff1a;普通字符和…

Java【手撕双指针】LeetCode 283. “移动零“, 图文详解思路分析 + 代码

文章目录 前言一、移动零1, 题目2, 思路分析3, 代码展示 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表,…

Docker修改daemon.json添加日志后无法启动的问题

docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…

spring框架,以及和spring框架相关的Java面试题和spring ioc的注入方式

目录 一.spring来源&#xff0c;以及介绍 1.spring诞生的背景 2.spring框架 介绍 3.spring框架在使用中的优点以及不足 3.1优点 3.2不足 3.3总结 4.为什么要使用spring 二.将spring框架部署在IDEA中 1.替换pom.xml 2.构建spring所需要的xml文件 三.spring的三种注入…

【VS Code插件开发】Webview面板(三)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

基于Java+SpringBoot+Vue的学校田径运动会管理系统【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

无涯教程-PHP - 常量声明

常量值不能更改。默认情况下&#xff0c;常量区分大小写。按照约定&#xff0c;常量标识符始终为大写。与变量不同&#xff0c;您不需要具有"$"的常量。 constant 函数 如名称所示&#xff0c;此函数将返回常量的值。 当您要检索常量的值但不知道其名称时&#xf…

协程框架NtyCo的实现

一、为什么需要协程&#xff1f; 讨论协程之前&#xff0c;我们需要先了解同步和异步。以epoll多路复用器为例子&#xff0c;其主循环框架如下&#xff1a; while (1){int nready epoll_wait(epfd, events, EVENT_SIZE, -1);int i0;for (i0; i<nready; i){int sockfd ev…

游戏msvcr120.dll丢失怎样修复?msvcr120.dll丢失常见原因

在尝试运行某些游戏时&#xff0c;我遇到了“msvcr120.dll丢失”的错误提示。经过一番调查和尝试&#xff0c;我成功地解决了这个问题。msvcr120.dll是Visual C Redistributable Package的一部分&#xff0c;它包含了许多运行Windows应用程序所需的库和函数。当游戏或其他应用程…

《有效调节情绪,保持工作心态平和》

工作中&#xff0c;我们有时会遇到各种挑战和困难&#xff0c;这些挑战和困难可能引发我们的负面情绪&#xff0c;例如焦虑、愤怒和沮丧等。然而&#xff0c;保持稳定的情绪是实现高效工作的重要因素之一。本文将分享如何在工作中保持稳定的情绪。 首先&#xff0c;让我们来谈谈…

CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch

centos系统环境搭建专栏&#x1f517;点击跳转 CentOS 7.9安装Elasticsearch 7.17.6 文章目录 CentOS 7.9安装Elasticsearch 7.17.61.下载2.上传3.解压4.调整es占用内存5.修改es默认Java为本地Java6.修改elasticsearch配置文件7.创建用户8.Elasticsearch 后台启动与关闭9.es管…

CoordAtt注意力网络结构

源码&#xff1a; import torch import torch.nn as nn import math import torch.nn.functional as Fclass h_sigmoid(nn.Module):def __init__(self, inplaceTrue):super(h_sigmoid, self).__init__()self.relu nn.ReLU6(inplaceinplace)def forward(self, x):return self.…

【CASS精品教程】CAD2016+CASS11.0安装教程(附CASS11.0安装包下载)

文章目录 一、CAD2016_x64安装二、CASS11.0安装1. 安装程序2. 安装补丁3. 安装注册机三、CASS11.0下载地址一、CAD2016_x64安装 CASS11.0.0.8 支持 AutoCAD2010-2023,大家可以根据自己的情况安装对应的版本,本文以CAD2016为例,CAD安装过程略去。 二、CASS11.0安装 点击订…

基于Pytorch构建DenseNet网络对cifar-10进行分类

DenseNet是指Densely connected convolutional networks&#xff08;密集卷积网络&#xff09;。它的优点主要包括有效缓解梯度消失、特征传递更加有效、计算量更小、参数量更小、性能比ResNet更好。它的缺点主要是较大的内存占用。 DenseNet网络与Resnet、GoogleNet类似&#…

机器学习深度学习——transformer(机器翻译的再实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——自注意力和位置编码&#xff08;数学推导代码实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

【Golang系统开发】搜索引擎(2) 压缩词典

写在前面 这篇文章我们就给出一系列的数据结构&#xff0c;使得词典能达到越来越高的压缩比。当然&#xff0c;和倒排索引记录表的大小相比&#xff0c;词典只占据了非常小的空间。那么为什么要对词典进行压缩呢&#xff1f; 这是因为决定信息检索系统的查询响应时间的一个重…

Spring Boot 如何通过jdbc+HikariDataSource 完成对Mysql 操作

&#x1f600;前言 本篇博文是关于Spring Boot 如何通过jdbcHikariDataSource 完成对Mysql 操作的说明&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的…

lvs-DR

lvs-DR数据包流向分析 client向目标VIP发出请求。 DIR根据负载均衡算法一台active的RS&#xff08;RIR1&#xff09;&#xff0c;将RIP1所在的网卡的mac地址作为目标的mac地址&#xff0c;发送到局域网里。 RIRI在局域网中的收到这个帧&#xff0c;拆开后发现目标&#xff08…

CSRF

CSRF CSRF&#xff0c;跨站域请求伪造&#xff0c;通常攻击者会伪造一个场景&#xff08;例如一条链接&#xff09;&#xff0c;来诱使用户点击&#xff0c;用户一旦点击&#xff0c;黑客的攻击目的也就达到了&#xff0c;他可以盗用你的身份&#xff0c;以你的名义发送恶意请…