OpenCV C++内存泄漏问题

kiz8lqtg  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(605)

请看下面的代码片段-

# 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的ram,在循环运行的几分钟内就被填充了。
如果我释放内存,那么为什么它一直获取我的内存。

ymdaylpp

ymdaylpp1#

cv::Mat对象包含元数据(宽度、高度等)和指向图像数据的指针。
正如您在链接中所看到的,cv::Mat::release方法释放了为cv::Mat数据分配的内存(假设引用计数为0)。
它不会为cv::Mat对象本身(即包含元数据和数据指针的类的示例)释放内存。
在您的示例中,对象是使用new在堆上分配的,因此应该使用相应的delete释放对象。
但是,我们并不清楚为什么要使用new,我们可以将堆栈中的cv::Mat作为一个自动变量:

cv::Mat mat(2000, 2000, CV_8UC3);

这样,它的析构函数(和解除分配)将在作用域结束时自动调用。
请注意,如果需要手动释放cv::Mat对象指向的数据,仍然可以使用release。在上述情况下,不需要使用release,因为cv::Mat的析构函数会为您处理它。

flvtvl50

flvtvl502#

我的MFC应用程序中的内存泄漏问题通过按以下顺序延迟加载dll来避免。
. dll文件中的数据。. dll文件中; opencv_world460d.dll

相关问题