上文介紹了c/c++編碼中記憶體洩露的問題,不過經過本人測試,好像對用opencv工具包進行編碼中的記憶體洩露並不起作用。crtsetdbgflag函式應該針對new/malloc這種方式分配記憶體的,而opencv的很多函式把記憶體分配封裝了,直接返回乙個指標(e.g. cvcreateimage返回iplimage指標),因而並不能檢測出opencv編碼的記憶體洩露.(這一段不知道說得對不對,還有待查證:0) ).針對這個問題,網上有乙個比較好的解決方法,就直接來過來用了。它是乙個針對opencv的記憶體洩露檢測的類,實現如下:
//標頭檔案
#ifndef opencv_mem_tracker_h
#define opencv_mem_tracker_h
#include
#include
// 記憶體洩漏追蹤類
class memtracker};
// 記錄當前使用中的記憶體
std::
vector
m_memtracker;
// alloc_func對應的編號
int m_id;};
#endif // opencv_mem_tracker_h
//cpp檔案
#include "memtracker.h"
#include
#include
memtracker::
memtracker
(void)
memtracker::~memtracker(
void
)// 登記分配/釋放的記憶體
void memtracker::
regalloc
(void
*ptr, size_t size)
void memtracker::
regfree
(void
*ptr)}}
// 輸出****存
int memtracker::
output
(file
* fp)
return n;
}// 分配記憶體
void
* memtracker::
alloc_func
(size_t size, void
*userdata)
// 釋放記憶體
int memtracker::
free_func
(void
*ptr, void
*userdata)
//測試程式
int main(
)
使用的時候,memtracker會跟每乙個指標分配乙個id,並記錄它的分配與釋放情況,對沒有釋放的記憶體將會被列印出來,包括此指標的id號, 指標的16進製制值,以及所指記憶體的大小。按f5進行除錯,根據id號找到洩露記憶體**的具體位置,新增釋放**。 記憶體洩露檢測
c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...
檢測記憶體洩露
程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...
記憶體洩露檢測
1 包含標頭檔案 include include 2 每個cpp檔案包含 static char this file file define new new normal block,this file,line 3 設定標誌 int tmpdbgflag tmpdbgflag crtsetdbgf...