C++內存泄露如何檢測?

1.檢查是否存在內存泄露

2.檢查哪裏出現內存泄露

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

如把 new xxx 壓入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把程序分成兩半分別使用上述方法來檢測內存泄漏,這樣就是使用二分法來檢查內存泄漏。

 

詳細見:http://blog.csdn.net/smiton/article/details/6400349  這裏寫得很好了。

其他:http://hi.baidu.com/ailuoli/blog/item/009defd91852b8f339012fcb.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章