欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++之內(nèi)存泄漏排查詳解

 更新時(shí)間:2021年10月10日 17:04:49   作者:自由追光者  
這篇文章主要介紹了c++ 如何排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助

一 、經(jīng)驗(yàn)排查

有經(jīng)驗(yàn)的程序員會(huì)對(duì)程序中申請(qǐng)內(nèi)存的地方進(jìn)行排查,例如malloc或者new關(guān)鍵字的地方進(jìn)行跟蹤,一種情況是我們按照程序邏輯進(jìn)行了申請(qǐng)和釋放,要提防程序在發(fā)生異常時(shí)沒有如我們所期望的那樣進(jìn)行內(nèi)存釋放,此時(shí)也應(yīng)當(dāng)防止內(nèi)存泄漏。

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

2.1 Visual Leak Detector for Visual C++簡(jiǎn)介

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

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

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

提供泄漏塊的完整數(shù)據(jù)轉(zhuǎn)儲(chǔ)(以十六進(jìn)制和 ASCII 格式)。

可定制的內(nèi)存泄漏報(bào)告:可以保存到文件或發(fā)送到調(diào)試器,并且可以包含可變級(jí)別的詳細(xì)信息。

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

2.2 Visual Leak Detector源碼獲取編譯

2.2.1 源碼獲取,相關(guān)git地址

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

2.2.2 發(fā)布版本獲取

  • 在git主頁有Visual Leak Detector for Visual C++ Releases,只需要下載對(duì)應(yīng)的版本,進(jìn)行安裝即可。

2.2.3 進(jìn)行編譯

  • 本代碼要求的vs版本為2019,博主使用的版本為為2015,在編譯時(shí)候會(huì)報(bào)錯(cuò)
 項(xiàng)目-->屬性--->常規(guī)-->平臺(tái)工具集--->選擇 Visual Studio 2015(v140)確定,就OK

2.2.4 自帶gtest工程測(cè)試

  • 編譯項(xiàng)目自帶的vld_main進(jìn)行測(cè)試,項(xiàng)目中自帶gtest工程對(duì)相關(guān)內(nèi)存泄漏場(chǎng)景進(jìn)行了自測(cè)

2.3 如何測(cè)試自己的項(xiàng)目呢

2.3.1 配置工程

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

引入頭文件

配置庫(kù)路徑

配置鏈接庫(kù)

設(shè)置當(dāng)前工程為Debug模式,才能顯示堆棧相關(guān)的調(diào)用信息

配置debug模式

2.3.2 編寫簡(jiǎn)單的測(cè)試用例

  • 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è)結(jié)果如圖

檢測(cè)結(jié)果

程序執(zhí)行完之后會(huì)在終端顯示內(nèi)存泄漏的的個(gè)數(shù),并同時(shí)會(huì)打印相關(guān)的內(nèi)存泄漏的堆棧信息,當(dāng)鼠標(biāo)點(diǎn)擊終端信息輸出的位置時(shí),同時(shí)會(huì)在上方代碼指示哪一行出現(xiàn)內(nèi)存泄漏。

三、總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 淺析stl序列容器(map和set)的仿函數(shù)排序

    淺析stl序列容器(map和set)的仿函數(shù)排序

    有序的stl容器在工程中應(yīng)用什么方便和廣泛,但是當(dāng)我們需要自己的排序的時(shí)候,可以用仿函數(shù)來設(shè)置它
    2013-09-09
  • C++中使用哈希表(unordered_map)的一些常用操作方法

    C++中使用哈希表(unordered_map)的一些常用操作方法

    C++標(biāo)準(zhǔn)庫(kù)中使用的unordered_map底層實(shí)現(xiàn)是哈希表,下面這篇文章主要給大家介紹了關(guān)于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以參考下
    2022-03-03
  • C++通過類實(shí)現(xiàn)控制臺(tái)貪吃蛇

    C++通過類實(shí)現(xiàn)控制臺(tái)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C++通過類實(shí)現(xiàn)控制臺(tái)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 一道面試題教你輕松玩轉(zhuǎn)C++指針

    一道面試題教你輕松玩轉(zhuǎn)C++指針

    下面小編就為大家?guī)硪黄钊肜斫鈉++指針的指針和指針的引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2021-09-09
  • VC++中圖像處理類CBitmap的用法

    VC++中圖像處理類CBitmap的用法

    使用VC進(jìn)行圖像處理的時(shí)候,CBitmap類為我們提供了豐富的位圖處理函數(shù),本文總結(jié)了該類的相關(guān)函數(shù)和常用使用方法,包括加載位圖,顯示位圖,析構(gòu)CBitmap資源以及在內(nèi)存中保存位圖等內(nèi)容。
    2015-11-11
  • java 出現(xiàn)NullPointerException的原因及解決辦法

    java 出現(xiàn)NullPointerException的原因及解決辦法

    這篇文章主要介紹了java 出現(xiàn)NullPointerException的原因及解決辦法的相關(guān)資料,這里說明出現(xiàn)NullPointerException 的原因的總結(jié),并說明該如何解決,需要的朋友可以參考下
    2017-08-08
  • C語言簡(jiǎn)單實(shí)現(xiàn)掃雷小游戲

    C語言簡(jiǎn)單實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言簡(jiǎn)單實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • c++ 排查內(nèi)存泄漏的妙招

    c++ 排查內(nèi)存泄漏的妙招

    這篇文章主要介紹了c++ 如何用輔助類排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • 用C語言編寫推箱子游戲

    用C語言編寫推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言編寫推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++線程同步實(shí)例分析

    C++線程同步實(shí)例分析

    這篇文章主要介紹了C++線程同步實(shí)例分析,以實(shí)例的形式較為深入的分析了C++的線程同步問題,是一個(gè)較為經(jīng)典的線程同步問題,需要的朋友可以參考下
    2014-10-10

最新評(píng)論