2012-11-04 49 views
0

我CvMat中創建指針的向量如下:如何釋放CvMat指針向量的內存?

vector<CvMat*> items; 
for(int i = 0;i<5;i++){ 
    CvMat* mat = cvCreateMat(5,1,CV_32FC1); 
    // assign values to mat 
    items.push_back(mat); 
} 

然後我嘗試如下,以釋放內存:

for(int i = 0;i<5;i++){ 
    cvReleaseMat(&items[i]); 
} 
vector<CvMat*>().swap(items); 

不過,我不認爲這影響了內存使用在任務經理。

對我而言有什麼想法?

在此先感謝...

+0

這只是25浮點數加上5個矩陣標題,所以它可能不足以出現在任務管理器 – remi

+0

這只是例如,它在實際應用中高達10MB內存... – vudh

回答

2

內存不返回到系統。

在大多數運行時環境中,從操作系統分配給應用程序的內存保留在應用程序中,很少返回到操作系統。釋放內存塊允許您在應用程序內重新使用該塊,但不會將其釋放到操作系統以使其可用於其他應用程序。

UPD:

所以無論如何任務管理器不能用於控制內存分配和釋放可靠的工具。如果你想保證你的應用程序沒有內存泄漏,你可能想要使用valgrind(如果你在Linux上)或者drMemory(谷歌或者其他幾種)(谷歌的「內存泄漏檢測」)等工具。在這種情況下,您將獲得關於分配,釋放,泄漏,內存訪問衝突等最精確的信息。

+0

感謝您的幫助,nogard!但是當我爲單個CvMat *調用cvReleaseMat時,我看到了TaskManager中的內存更改。這真的很奇怪...... – vudh

+0

@vudh:我更新了我的答案 – nogard

相關問題