OpenCV記憶體洩露的檢測

2021-09-08 15:40:15 字數 1483 閱讀 6184

上文介紹了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...