2014-05-13 22 views
1

在我的函數中管理內存時遇到了一些問題。 Valgrid說我在轉換函數後有內存泄漏。難道是因爲數據沒有正確發佈?我試圖使用臨時指針,但我的程序崩潰或無法正常工作。有人遇到過這個問題嗎?在convertTo-function中使用Mat進行內存泄漏

this->images.push_back(new cv::Mat());               //ID 
cv::threshold(*this->images[MASK], *this->images[ID], 0.0, 1.0, cv::THRESH_BINARY); 
this->images[ID]->convertTo(*this->images[ID], CV_32SC1); 

這是valgrid輸出:(!或其他地方)

==5663== 64,339,996 bytes in 1 blocks are possibly lost in loss record 380 of 380 
==5663== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==5663== by 0x4E95117: cv::fastMalloc(unsigned long) (in /usr/local/lib/libopencv_core.so.2.4.9) 
==5663== by 0x4F31F38: cv::Mat::create(int, int const*, int) (in /usr/local/lib/libopencv_core.so.2.4.9) 
==5663== by 0x4F39CF9: cv::_OutputArray::create(cv::Size_<int>, int, int, bool, int) const (in /usr/local/lib/libopencv_core.so.2.4.9) 
==5663== by 0x4EB9373: cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const (in /usr/local/lib/libopencv_core.so.2.4.9) 
==5663== by 0x40D168: DataFrame::init() (DataFrame.cpp:68) 
==5663== by 0x40C943: DataFrame::DataFrame(char const*, LeafClassifier*) (DataFrame.cpp:31) 
==5663== by 0x414A19: DataHandler::loadFrame() (DataHandler.cpp:68) 
==5663== by 0x406680: main (main.cpp:58) 

回答

6

指針存儲在您的載體墊。

這些東西是在內部引用的,比如智能指針,並且通過存儲/複製指針(指向智能指針的指針聽起來很愚蠢,不?)。

使用普通vector<Mat>,交易每件一些額外〜56個字節的對今晚睡的聲音;)

+0

我會注意。難道這就是我的內存泄漏的原因,你認爲? –

+0

絕對!!!! – berak

+0

我編輯了這個問題。它確實解決了很多其他問題,所以謝謝你,但我仍然有問題:/ –