使用OpenCV时的内存异常(2.4.5)

时间:2013-06-26 18:40:59

标签: opencv

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

  

OpenCV错误:内存不足<无法分配2457620字节>功能未知。

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

#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;
}

1 个答案:

答案 0 :(得分: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更易于使用,并提供自动内存管理。