一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++之內存泄漏排查詳解

C++之內存泄漏排查詳解

2022-01-20 14:45自由追光者 C/C++

這篇文章主要介紹了c++ 如何排查內存泄漏,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助

一 、經驗排查

有經驗的程序員會對程序中申請內存的地方進行排查,例如malloc或者new關鍵字的地方進行跟蹤,一種情況是我們按照程序邏輯進行了申請和釋放,要提防程序在發生異常時沒有如我們所期望的那樣進行內存釋放,此時也應當防止內存泄漏。

 

二 、使用Visual Leak Detector for Visual C++

2.1 Visual Leak Detector for Visual C++簡介

  • Visual C++ 提供了內置的內存泄漏檢測,但它的功能充其量只是最小的。此內存泄漏檢測器是作為 Visual C++ 提供的內置內存泄漏檢測器的免費替代品而創建的。以下是 Visual Leak Detector 的一些功能,內置檢測器中不存在這些功能:
  • 為每個泄漏塊提供完整的堆棧跟蹤,包括可用的源文件和行號信息。

檢測大多數(如果不是全部)進程內內存泄漏類型,包括基于 COM 的泄漏和基于純 Win32 堆的泄漏。

  • 選定的模塊(DLL 甚至主 EXE)可以從泄漏檢測中排除。

提供泄漏塊的完整數據轉儲(以十六進制和 ASCII 格式)。

可定制的內存泄漏報告:可以保存到文件或發送到調試器,并且可以包含可變級別的詳細信息。

其他用于 Visual C++ 的售后泄漏檢測器已經可用。但大多數真正流行的,如 Purify 和 BoundsChecker,都非常昂貴。存在一些免費的替代方案,但它們通常太具有侵入性、限制性或不可靠。 Visual Leak Detector 是目前唯一可免費使用的 Visual C++ 內存泄漏檢測器,它將上述所有專業級功能整齊地打包在一個易于使用的庫中。

2.2 Visual Leak Detector源碼獲取編譯

2.2.1 源碼獲取,相關git地址

 git clone  https://github.com/oneiric/vld

2.2.2 發布版本獲取

  • 在git主頁有Visual Leak Detector for Visual C++ Releases,只需要下載對應的版本,進行安裝即可。

2.2.3 進行編譯

  • 本代碼要求的vs版本為2019,博主使用的版本為為2015,在編譯時候會報錯
項目-->屬性--->常規-->平臺工具集--->選擇 Visual Studio 2015(v140)確定,就OK

2.2.4 自帶gtest工程測試

  • 編譯項目自帶的vld_main進行測試,項目中自帶gtest工程對相關內存泄漏場景進行了自測

2.3 如何測試自己的項目呢

2.3.1 配置工程

在自己的工程中引入vld.h文件,并在鏈接庫中配置vld.lib庫

C++之內存泄漏排查詳解

C++之內存泄漏排查詳解

C++之內存泄漏排查詳解

設置當前工程為Debug模式,才能顯示堆棧相關的調用信息

C++之內存泄漏排查詳解

2.3.2 編寫簡單的測試用例

  • three.h
#pragma once
class three
{
public:
    three();
    ~three();
};

  • three.cpp
#include "three.h"

three::three()
{
}

three::~three()
{
}

  • main.cpp
#include<stdlib.h>
#include<stdio.h>
#include <iostream>
#include <vld.h>
#include "three.h"
using namespace std;

int main()
{
    cout << "vld test begin" << endl;
    int *one = new int[30];
    char *two = new char[40];
    three * tmp = new three();
    return 0;
}

2.3.3 檢測結果如圖

C++之內存泄漏排查詳解

程序執行完之后會在終端顯示內存泄漏的的個數,并同時會打印相關的內存泄漏的堆棧信息,當鼠標點擊終端信息輸出的位置時,同時會在上方代碼指示哪一行出現內存泄漏。

 

三、總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/zhouming5/article/details/120656782

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 亚洲国产精品综合久久网络 | 激情艳妇之性事高h | 日本黄视频在线播放 | 办公室出轨秘书高h | 咪咪爱小说 | 放荡的女老板bd中文字幕 | 国产a一级毛片爽爽影院 | juliaann厨房大战 | 日韩一区在线播放 | 成人特级毛片69免费观看 | 波多野结衣 在线播放 | 99毛片| 教室里老师好紧h | 国产成人夜色影视视频 | 男人在女人下面狂躁 | 国产激情一区二区三区成人91 | 欧美日韩精品在线视频 | 我的好妈妈7中字在线观看韩国 | 国产梦呦精品 | 国产精品女主播大秀在线 | 私人影院免费观看 | 亚洲国产高清一区二区三区 | 幻女free性zoz0交 | 男女姓交大视频免费观看 | 第四色男人天堂 | 韩国成人毛片aaa黄 含羞草国产亚洲精品岁国产精品 | 欧美添下面视频免费观看 | 草莓视频在线观看免费 | 大肥婆丰满大肥奶bbw肥 | 色中文| 日韩精选在线 | 美女扒开胸罩露出奶 | 国产亚洲精品日韩香蕉网 | 手机看片日韩1024你懂的首页 | 91啦中文在线观看 | 逼逼狗影院 | 东北疯狂xxxxbbbb中国 | 3d动漫美女物被遭强视频 | 男人的天堂视频 | 亚洲成色WWW久久网站夜月 | 陈峰姚瑶全集小说无删节 |