c++ - 如何释放 CvMat 指针 vector 的内存?

标签 c++ opencv

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

相关文章:

在c中使用opencv裁剪图像

c++ - C++ 中十进制转换为十六进制的困惑

optimization - 提高直方图反投影速度

opencv - 如何在 Windows 10 64 位上使用 mingw 编译 opencv_ffmpeg.dll 文件?

c++ - 创建对不存在的数组项的引用是未定义的行为吗?

android - 需要在Android客户端调用Kurento Media Server opencv插件

opencv - 相机平移时的单应性(用于拼接)

c++ - `decltype` 作为模板函数声明中模板类型规范的一部分

c++ - 为什么每次成功的 QueryInterface() 调用之后都是 Release() 调用?

c++ - 在客户端机器上调试发布版本