繁体   English   中英

OpenCV C++ 内存泄漏问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM