0

这是我的程序。这真的很容易。我正在尝试运行 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;
}
4

1 回答 1

1

你的问题是你有内存泄漏。该行:

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

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

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

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

到以下:

CvMat temp;
CvMat* mat_ = &temp;

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

于 2013-06-26T19:39:02.430 回答