記憶體越界在**編寫中很常見,下面介紹如果防止部分記憶體越界。
一般而言,系統中存在下面幾個函式:malloc,free,memcpy,memcmp
首先要做的是將上述函式進行封裝,前面加上字首csdn_malloc,csdn_free,csdn_memcpy, csdn_memcmp,
malloc的時候,多申請8個位元組,頭部4個位元組,尾部4個位元組,中的記憶體返回。然後對頭部和尾部的位元組進行魔鬼數字處理,這樣在釋放記憶體的時候,檢查魔鬼數字是否被改寫,如果被改寫肯定說明存在記憶體越界寫。
malloc記憶體的時候,把這些資料儲存起來,包括首位址和長度,然後再memcpy的時候做一些檢查處理,檢查是否越界讀,或者越界寫。
如果維護好了malloc記憶體列表,還是可以實現記憶體洩露的檢測。
malloc的時候傳入乙個標識,說明是靜態分配,還是動態分配。對於動態分配的記憶體,超過1小時就認為這塊記憶體洩露了。
Linux使用者程序記憶體洩露一種檢測方法
在 linux 中,使用者程序在 proc status 檔案中記錄了該程序的記憶體使用實時情況。vmsize 虛擬記憶體大小。整個程序使用虛擬記憶體大小,是 vmlib,vmexe,vmdata,和 vmstk 的總和。vmlck 虛擬記憶體鎖。程序當前使用的並且加鎖的虛擬記憶體總數 vmrss ...
VC 記憶體洩露與檢測的一種方法
本文介紹,當vc 或者mfc程式,出現記憶體洩露時,如何快速定位的方法,這種方法有一定的侷限性,在注意事項中會給出的。當mfc程式出現記憶體洩露時,退出程式時的vs除錯輸出視窗,一般會有如下顯示 上面顯示了在程式的哪個檔案的哪行語句,發生了記憶體洩露,其中 表示 記憶體分配編號 normal blo...
一種定位記憶體洩露的方法(Linux)
本文是 一種定位記憶體洩露的方法 solaris 對應的 linux 版本,偵錯程式使用 gdb。主要介紹例項部分。其他請見 一種定位記憶體洩露的方法 solaris 模擬 new失敗的程式 include class abc int i int j void f throw std bad all...