释放内存opencv

and*_*rea 4 c c++ opencv memory-leaks

我已经发布了一些关于释放所有IplImage和所有CvMat结构的帖子CvMemStorage,但是我仍有一些内存问题.

我是否也将发布CvPoint,CvScalar,CvPoint*(排列3个CvPoints,我一定要释放的每个元素吗?)

如果我必须释放所有这些东西,我该怎么办?我没有找到任何功能.我在C/C++中使用OpenCV 2.1.

以下是我如何声明它们:

CvScalar b1;
CvScalar f;
float *data=(float*)resd->imageData; (need to release data)
CvPoint *point;
CvPoint pt;
CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));   
Run Code Online (Sandbox Code Playgroud)

kar*_*lip 5

这个问题比OpenCV更加C相关.例如,这些:

CvScalar b1;
CvScalar f;
CvPoint pt;
Run Code Online (Sandbox Code Playgroud)

是局部变量,因此当{ }它们所属的范围完成执行时,它们会自动处理.

这个:

CvPoint *point;
Run Code Online (Sandbox Code Playgroud)

是一个指针,同时是一个局部变量.你不应该deletefree()它,因为你没有通过new或分配任何内存malloc().这样做会导致问题(可能是崩溃).

data另一方面:

float *data = (float*)resd->imageData;
Run Code Online (Sandbox Code Playgroud)

是一个包含内存块的指针和局部变量.然而,这不是明智的,delete[] data;free(data)在这种特殊情况下,因为你没有直接分配此内存.很明显,这个内存是作为一部分分配的resd,这意味着你必须检查代码并找出如何resd声明/初始化变量,然后执行相应的过程来释放它.因为我对OpenCV知之甚少,我可以说它resd是一个IplImage*.如果你曾经cvCreateImage()创建过这个变量,那么你的工作就是释放它cvReleaseImage().

最后:

CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));  
Run Code Online (Sandbox Code Playgroud)

这是动态内存分配的典型案例,您可以专门分配一定量的内存.由于它ptsCorner是一个局部变量和一个指针,当它所属的范围完成执行时,你将失去对该内存块的引用,它将在你的RAM中丢失,造成内存空间并导致泄漏.不用说,free()在这种情况下你必须执行以释放内存.