在這篇文章中,將介紹一種定位記憶體洩露的方法。主要原理是通過記憶體洩露時分配的序號以及大小,配合dbgheap.c
檔案來定位。
在vs開發過程中,開啟crt內部的記憶體洩露檢測函式,當程式退出時,在除錯視窗會輸出未釋放的記憶體資訊,例如下圖所示:
從上面截圖可以得知,該次記憶體分配序號為1789698
,記憶體指標為0x24c6d068
,分配的大小為192800
位元組。
檢視vc的crt記憶體分配庫函式dbgheap.c
中,實際分配的關鍵函式如下:
在該函式的入口處加設條件斷點,使得nsize
等於釋放的記憶體大小即可,等待偵錯程式在該處停止,然後往上回溯呼叫棧,發現真正洩露之處。
還有根據記憶體分配序號來定位,也可以在上述檔案中尋找對應條件斷點檢測入口。
針對只有特定操作觸發的記憶體洩露,可先不要使能該斷點,待環境準備好之後,使能斷點後立即操作。
這種方法適用於洩露記憶體大小始終固定情況,是一種簡易的笨方法。
一種定位記憶體洩露的方法(Linux)
本文是 一種定位記憶體洩露的方法 solaris 對應的 linux 版本,偵錯程式使用 gdb。主要介紹例項部分。其他請見 一種定位記憶體洩露的方法 solaris 模擬 new失敗的程式 include class abc int i int j void f throw std bad all...
Linux使用者程序記憶體洩露一種檢測方法
在 linux 中,使用者程序在 proc status 檔案中記錄了該程序的記憶體使用實時情況。vmsize 虛擬記憶體大小。整個程序使用虛擬記憶體大小,是 vmlib,vmexe,vmdata,和 vmstk 的總和。vmlck 虛擬記憶體鎖。程序當前使用的並且加鎖的虛擬記憶體總數 vmrss ...
VC 記憶體洩露與檢測的一種方法
本文介紹,當vc 或者mfc程式,出現記憶體洩露時,如何快速定位的方法,這種方法有一定的侷限性,在注意事項中會給出的。當mfc程式出現記憶體洩露時,退出程式時的vs除錯輸出視窗,一般會有如下顯示 上面顯示了在程式的哪個檔案的哪行語句,發生了記憶體洩露,其中 表示 記憶體分配編號 normal blo...