【发布时间】:2018-01-25 16:05:27
【问题描述】:
我想释放包含 cv::Mat 类型的列表容器的内存。我在这里阅读了很多内容并尝试了以下方法,但没有成功:
std::list<Mat> images; // This is a static member object;
交换技巧:
std::list<Mat>().swap(images);
或
std::list<Mat> foo;
foo.swap(images);
擦除每个垫子:
for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
it = images.erase(it);
}
释放每个 Mat:
for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
it->release();
}
使用 std::list* 指针:
delete std::list<Mat>* images;
images = new std::list<Mat>;
使用 free() 释放每个 Mat 的内存:
for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
free(&(*it));
}
images.clear();
调整列表大小:
images.resize(0);
images.clear();
我无法在堆/范围内创建数据,所以它会在它消失时被删除。它必须是静态成员对象。向量也不适合我,因为多次删除了任意矩阵。
谁知道我可以做些什么来释放内存?
【问题讨论】:
-
您可能想说明为什么您认为其中一些方法不起作用,即您得到什么输出来定义错误。
-
我没有收到任何错误,除了带有 free() 的部分。这会产生内存异常。关于其他的,使用这些后内存不可用。
标签: c++ list opencv memory free