C 記憶體洩露如何檢測?

2021-06-07 02:16:12 字數 876 閱讀 1461

1.檢查是否存在記憶體洩露

2.檢查**出現記憶體洩露

檢查記憶體洩露不能僅僅靠工具,需要了解**的框架。即使檢查出結果顯示出現記憶體洩露,那也有可能是正常的,具體看你的意圖了,如果**是自己寫得那應該不成問題。

如把 new *** 壓入list中。 list在其他地方remove然後delete。

所以解決記憶體洩露最主要的方法不是在工具,或者幾行除錯**,而在於你對程式邏輯的理解。

如果單純new出來的東西,用乙個區域性的指標指向。但在函式結尾沒有重定向,或者delete,那必定出現記憶體洩露。

下面提供檢查並除錯記憶體洩露的簡單方法。

思路很簡單:檢查記憶體出現洩露——》二分法定位記憶體洩露區域——》分析解決問題。

為了得知一段**中是否有記憶體洩漏,你可以在這段**的開始和完成處分別拍乙個快照,然後呼叫_crtmemdifference函式來比較兩個狀態:

_crtmemcheckpoint( &s1 );

// memory allocations take place here

_crtmemcheckpoint( &s2 );

if ( _crtmemdifference( &s3, &s1, &s2) ) 

_crtmemdumpstatistics( &s3 );

就像名字中暗示的那樣,_crtmemdifference比較兩個記憶體狀態,並且產生乙個結果(第乙個引數)。把 _crtmemcheckpoint 放在程式的開始和結尾,呼叫_crtmemdifference 來比較結果,這也是一種檢測記憶體洩漏的方法。如果發現記憶體洩漏,你可以使用_crtmemcheckpoint把程式分成兩半分別使用上述方法來檢測記憶體洩漏,這樣就是使用二分法來檢查記憶體洩漏。

詳細見:  這裡寫得很好了。

其他:

如何檢測記憶體洩露

c 大量的手動分配 記憶體是存在風險的,很有可能因為我們的操作不當導致記憶體洩露的問題。介紹一種在debug模式下測試記憶體洩露的方法。先在檔案的開頭加上如下 切記順序不可以改變。define crtdbg map alloc include include 第一行的巨集,是實現一些記憶體分配函式向...

C 檢測記憶體洩露

p new int p指標修改,原來申請記憶體的位址沒有記錄下來,於是無法釋放 下面介紹如何檢查記憶體洩漏 1.包含標頭檔案和定義 define crtdbg map alloc 並非絕對需要該語句,但如果有該語句,列印出來的是檔名和行數等更加直觀的資訊 include include 1 incl...

C 記憶體洩露檢測

記憶體檢測相關命令 valgrind tool memcheck leak check full undef value errors yes ql circle svr2 id 20000 tcp 192.168.1.55 8000 svr 192.168.1.55 8015 valgrind t...