这是我的计划。这真的很容易。我正在尝试运行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;
}
答案 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更易于使用,并提供自动内存管理。