VS2008中捕獲記憶體泄露(轉)

來源:互聯網
上載者:User

標籤:

記憶體泄露十分討厭,捕獲記憶體泄露更加令人厭煩……

其實,VS本身就有記憶體泄露的檢測機制。只需做以下操作即可開啟。(同時必須在debug模式 下運行程式並且以 正常流程退出 )

 

 

view plaincopy to clipboard 
  1. // 在入口函數cpp中添加以下定義和標頭檔   
  2. #define CRTDBG_MAP_ALLOC   
  3. #include <stdlib.h>   
  4. #include <crtdbg.h>   
  5. // 在入口函數一開始添加以下代碼   
  6. _CrtDumpMemoryLeaks();  
  7.     _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );  
[cpp] view plaincopy 
  1. // 在入口函數cpp中添加以下定義和標頭檔  
  2. #define CRTDBG_MAP_ALLOC  
  3. #include <stdlib.h>  
  4. #include <crtdbg.h>  
  5. // 在入口函數一開始添加以下代碼  
  6. _CrtDumpMemoryLeaks();  
  7.     _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );  

 

 

 

然後在以 正常流程退出 程式後, 就會在輸出視窗顯示出記憶體泄露的資訊了。

注意!重點來了。

雖然VS檢測出來了哪裡有了記憶體泄露, 但是有可能你得到的有效資訊只有兩個 (如下)

 

1. 未釋放的記憶體大小。(綠色部分 )

2. 這塊記憶體是程式中總計第幾個被申請的。(藍色部分 )。

3. 而申請空間所在代碼的位置可能不會被顯示(刪除線部分 )。

 

Detected memory leaks! Dumping objects -> C:/PROGRAM FILES/VISUAL STUDIO/MyProjects/leaktest/leaktest.cpp(20) : {18 } normal block at 0x00780E80, 64 bytes long.Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CDObject dump complete.

 

 

 

那麼, 如果出現了這種情況, 其實是根本無法知道哪裡出了問題。那麼這個時候該怎麼辦呢?

這個時候需要使用這個函數。

 

view plaincopy to clipboard 
  1. //num就是剛剛檢測出來的記憶體泄露的地方大括弧內的數字   
  2. _CrtSetBreakAlloc(num);  
[cpp] view plaincopy 
  1. //num就是剛剛檢測出來的記憶體泄露的地方大括弧內的數字  
  2. _CrtSetBreakAlloc(num);  

 

 

 

這個函數的作用是,在你運行程式的時候,會在第num次申請空間時斷點。

所以,你需要重新運行一遍程式 。(只要流程一樣,記憶體申請順序肯定是一樣的,所以會正確的在需要的地方斷掉。)

注意,之前提示的記憶體泄露中大括弧內的數值就是指的第幾次申請的空間泄露了。

這個時候查看堆棧調用 ,即可知道到底是在哪裡申請了記憶體但是忘記釋放掉了。然後將這塊記憶體在合適的時候釋放掉就行了。

VS2008中捕獲記憶體泄露(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.