【问题标题】:Memory exception while using OpenCV (2.4.5)使用 OpenCV (2.4.5) 时出现内存异常
【发布时间】:2013-06-26 18:40:58
【问题描述】:

这是我的程序。这真的很容易。我正在尝试运行 10,000 次迭代,但在第 838 次迭代之后,我总是收到以下消息:

OpenCV 错误:内存不足 in unknown function。

为什么会抛出这个内存异常?

#include "stdafx.h"
#include "cv.h" 
#include "opencv2\core\core.hpp"
#include "opencv2\highgui\highgui.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
    for(int i = 0;i<100000;i++)
    {
        CvMat *mat = cvCreateMat(640*480,5,CV_64FC1);
        CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);

        cvGetCol(mat,mat_,1);
        printf("%d th iteration \n",i);

        cvReleaseMat(&mat_);
        cvReleaseMat(&mat);
    }
return 0;
}

【问题讨论】:

    标签: opencv


    【解决方案1】:

    您的问题是内存泄漏。行:

    CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);
    

    为具有指定维度的CvMat 分配内存。当您将该指针传递给cvGetCol() 时,指针将更改为指向mat 中的指定列。但是,您之前分配的内存永远不会被释放,从而导致内存泄漏。

    要解决此问题,请更改行:

    CvMat *mat_ = cvCreateMat(640*480,1,CV_64FC1);
    

    到以下:

    CvMat temp;
    CvMat* mat_ = &temp;
    

    这应该可以解决您的内存泄漏问题。但是,如果可能的话,我强烈建议您改用 C++ API(使用 cv::Mat)。 C API 已弃用,C++ API 更易于使用并提供自动内存管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 2011-12-08
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多