簡易 查詢VS2008控制檯記憶體洩露
由於在學習C++,其中經常一個問題就是記憶體管理問題。 1.記憶體洩露問題 就是通過動態分配的記憶體,但是在程式結束的時候,並沒有釋放掉,而導致的問題。這個問題特別出現在連續24小時工作的平臺上,一般有這樣的問題,時間一久就記憶體不斷減少,直至系統崩潰。 2.在MFC程式中,已經有了記憶體檢查機制。如何在控臺程式中也出現呢?
希望的就是,在程式退出之前檢查是否有記憶體洩露,也就是動態申請的記憶體有沒有釋放掉。一旦有的話,就直接彈出一個對話方塊,提示。而且可以定位到具體哪行可能出現的洩露問題。
將具體的資訊做成一個標頭檔案,然後放置到在每個工程中,再在程式中Include該標頭檔案。在main函式註冊一下。atexit(Exit)一下。具體的見下圖。
3.步驟
①新增測試檔案
如上是我建立的一個控制檯工程,將TestMemoryLeak.h加入到該工程中。該檔案的程式碼為:
#include <assert.h>
#ifdef _DEBUG
#define DEBUG_NORMALBLOCK new( _NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NORMALBLOCK
#endif
#define _CRTDBG_MAP_ALLOC //新增記憶體對映資訊 可以看出在哪個檔案哪行 記憶體洩露
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_NORMALBLOCK
#endif
void Exit()
{
int i = _CrtDumpMemoryLeaks(); //一旦有記憶體洩露返回 非0
assert( i == 0); //assert後面是個布林值 為真 繼續執行。為假卡住
}
![](https://i.iter01.com/images/cecd4cb619ca03102d30066c7ab5f38260725b19f75cda07b31aff5a6ce27aaf.jpg)
② 在控制檯程式中 include進去,然後在Mian函式註冊一下.h檔案中的有的函式 Exit.
③點選除錯 F5不是 Ctrl +F5.
發現了debug error.這是因為assert導致的。
④ 如何定位具體的哪個行程式碼呢?
在點選終止後,檢視輸出視窗。
看到了資訊。雙擊輸出的原始檔那行。自動定位到 記憶體洩露的地方。
具體標頭檔案中什麼意思。Exit函式什麼意思。可以自行查詢。這個只是簡單的在控制檯使用,因為只有一個出口,對於多出口的就不好使了。具體很多除錯技術,網上也有很多。
特別要注意的是:你控制檯程式的輸入輸出不要使用iostream.使用stdio.h。不然編譯不通過。
相關文章
- [翻譯]查詢Windows記憶體洩露的幾種方法Windows記憶體洩露
- 轉載 ]查詢Windows記憶體洩露的幾種方法Windows記憶體洩露
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 簡單的記憶體“洩露”和“溢位”記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 解Bug之路-記一次JVM堆外記憶體洩露Bug的查詢JVM記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- ArkTS 的記憶體快照與記憶體洩露除錯記憶體洩露除錯
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- php常駐程式記憶體洩露的簡單解決PHP記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- 今我們們來聊聊JVM 堆外記憶體洩露的BUG是如何查詢的JVM記憶體洩露
- android Handler導致的記憶體洩露Android記憶體洩露
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露
- 解決git記憶體洩露問題Git記憶體洩露
- Spring Boot heapdump洩露記憶體分析方法Spring Boot記憶體
- 線上記憶體洩露定位--memleak工具記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- Mybatis 中將 SQL 查詢記錄到控制檯MyBatisSQL
- 記一次"記憶體洩露"排查過程記憶體洩露
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露
- 一個Vue頁面的記憶體洩露分析Vue記憶體洩露
- C程式記憶體洩露檢測工具——ValgrindC程式記憶體洩露
- Android效能最佳化之記憶體洩露Android記憶體洩露
- Python實現記憶體洩露排查的示例Python記憶體洩露
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- 記一次 .NET 某工控軟體 記憶體洩露分析記憶體洩露
- ThreadLocal原始碼解讀和記憶體洩露分析thread原始碼記憶體洩露
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- 一次Kafka記憶體洩露排查經過Kafka記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- 利用dotnet-dump分析docker容器記憶體洩露Docker記憶體洩露