我创建了一个 CvMat 指针 vector ,如下所示:
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);
但是,我没有发现这会影响任务管理器中的内存使用情况。
对我有什么想法吗?
提前致谢...
最佳答案
内存没有归还给系统。
在大多数运行时环境中,从操作系统分配给应用程序的内存保留在应用程序中,很少返回给操作系统。释放内存块允许您在应用程序中重用该 block ,但不会将其释放到操作系统以供其他应用程序使用。
更新:
因此无论如何,任务管理器都不是控制内存分配和释放的可靠工具。如果您想保证您的应用程序没有内存泄漏,您可能需要使用诸如 valgrind(如果您使用的是 Linux)、google 的 drMemory 或其他几个工具(google 的“内存泄漏检测”)之类的工具。在这种情况下,您将获得有关分配、释放、泄漏、内存访问冲突等的最精确信息。
关于c++ - 如何释放 CvMat 指针 vector 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220080/