[英]OpenCV C++ memory leak issue
只需查看以下代码片段 -
# include "opencv4/opencv2/opencv.hpp"
# include "iostream"
int main() {
while (true) {
cv::Mat* mat = new cv::Mat(2000, 2000, CV_8UC3);
std::cout << "mat size" << mat->size() << std::endl;
mat->release();
std::cout << "mat size after" << mat->size() << std::endl;
}
}
运行后的问题是 - ram 不断填充。 我有 48 GB 的内存,在循环运行的几分钟内就被填满了。
如果我要释放内存,那么为什么它会不断获取我的内存。
cv::Mat
对象包含元数据(宽度、高度等)和指向图像数据的指针。
正如您在链接中看到的那样, cv::Mat::release
方法释放了为cv::Mat
数据分配的内存(假设 ref-count 为 0)。
它不会为cv::Mat
对象本身(即包含 medadata 和数据指针的类的实例)释放内存。
在您的情况下,该对象是使用new
在堆上分配的,因此应该使用相应的delete
释放。
但是-根本不清楚为什么要使用new
。 您可以将堆栈上的cv::Mat
作为自动变量:
cv::Mat mat(2000, 2000, CV_8UC3);
这样,它的析构函数(和释放)将在作用域结束时自动调用。
请注意,如果您需要手动释放cv::Mat
对象指向的数据,您仍然可以使用release
。 在您上面的情况下,它是不需要的,因为cv::Mat
的 destrcutor 会为您处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.