如何释放CvMat指针向量的内存?

时间:2012-11-04 15:45:30

标签: c++ opencv

我创建了一个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);

但是,我没有看到这影响了任务管理器中的内存使用情况。

对我有什么想法?

提前致谢...

1 个答案:

答案 0 :(得分:2)

内存未返回系统。

在大多数运行时环境中,从操作系统分配给应用程序的内存仍保留在应用程序中,很少返回给操作系统。释放内存块允许您从应用程序中重用该块,但不会将其释放到操作系统以使其可供其他应用程序使用。

UPD:

所以无论如何,任务管理器不能成为控制内存分配和解除分配的可靠工具。如果您想保证您的应用程序没有内存泄漏,您可能需要使用诸如valgrind(如果您使用的是Linux),或谷歌的drMemory或其他几个(google用于“内存泄漏检测”)等工具。在这种情况下,您将获得有关分配,解除分配,泄漏,内存访问违规等的最准确信息。