在VC下定位記憶體洩漏總結

2021-05-25 17:09:43 字數 1078 閱讀 5453

對於如何快速找到和定位記憶體洩漏的問題,網上已經有很多相關的內容。在這裡也就做乙個總結。

1.如何發現記憶體洩漏。

vc中檢測記憶體洩漏的基本工具是偵錯程式和 crt 除錯堆函式。為了使用除錯堆函式,必須在要除錯的程式中新增下面的語句:

code:

#define _crtdbg_map_alloc 

#include

#include

必須保證上面宣告的順序,如果改變了順序,可能不能正常工作尋找記憶體洩漏的原理只是改變了記憶體分配的介面,即在debug版中,使用的_malloc_dbg和_free_dbg取代標準的malloc和free函式。由於它們可以跟蹤記憶體的分配和釋放,從而可以檢測動態分配的記憶體是否被釋放。但是這只會在debug版本中發生(當#define _debug的時候),而release版本仍使用標準的malloc和free功能。

#define _crtdbg_map_alloc表示使用crt堆函式的相應的debug版本。這個定義不是必須的,但是沒有它,記憶體洩漏報告中的資訊不是很詳細。

一旦你已經新增了剛才的宣告,你就能夠通過在程式return前加入下面的**來報告記憶體洩漏資訊:

code:

_crtdumpmemoryleaks();   

例如:code:

#define _crtdbg_map_alloc 

#include

#include//依次加上以上語句

#include 

using

namespace std;   

int main()     

當在debug模式下執行程式時,在output視窗的debug頁會顯示如下記憶體洩漏的資訊:

detected memory leaks!

dumping objects ->

normal block at 0x00396a58, 2 bytes long.

data: 41 42

object dump complete.

C 記憶體洩漏定位 valgrind

new 和 delete 不匹配導致記憶體洩漏。最開始因為指標被我不小心delete了,導致有錯誤,就遮蔽了。網上學習了用valgrind 定位洩漏記憶體的位置,比較方便。然後,編譯源程式,比如 g g o testexe testexe.cpp 然後利用valgrind 進行定位,可執行程式可能有...

定位一起記憶體洩漏

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

記憶體洩漏了,該如何定位

程序的使用者空間記憶體包括了多個不同的記憶體段,比如唯讀段 資料段 堆 棧 以及檔案對映等,這些記憶體段是應用程式使用記憶體的基本方式。比如再程式中定義乙個區域性變數,int data 64 就定義了乙個可以儲存64個整數的記憶體段,由於是區域性變數,會從記憶體空間的棧中分配。記憶體洩漏的危害非常大...