我正在创建一个视觉面板,该面板与一个大的(IplImage *)一致,方法迭代该面板以放置到图形的相对位置更新中。
看起来像这样
在代码中,每次迭代,这些“占位符”/“槽”都用对应的图形图像(来自创建图像的绘图对象)更新到相应的位置(创建位置并将其放入相对于地图的地图中)我正在绘制多少图表)
我没有直接绘制到面板上的原因是因为我构建了这个面板,它接受并显示任何IplImage放入“槽”,我稍后会这样做。
我知道如果没有正确发布,IplImages已经过时且内存管理太可怕了,但是,我使用的是一个使用旧opencv的库,所以为了方便一切(因为我试图将所有内容转换为Mat,但是这使事情更复杂),我继续IplImages
我找到了出错的地方,就在这里:
void RsPanel::updateComponents()
{
for (int i = 0; i < totalspots; i++) {
CvRect rectangle = cvRect(positionMap[i].x, positionMap[i].y, slotSize.width, slotSize.height);
cvSetImageROI(window, rectangle);
img = slots[i].getImage();
cvCopy(img, window);
cvResetImageROI(window);
}
cvShowImage(name, window);
更准确地说:
img = slots[i].getImage();
从我的理解,内存泄漏是由于没有正确释放以前的“img”,但是当我使用cvReleaseImage发布时,事情就崩溃了(因为从我的理解,它需要在我完成之后完成使用图像。
我尝试从插槽中释放“img”和cvCloneImage-ing(槽[i] - > getImage()),但是这给了我同样的内存问题
不释放,在一分钟内,程序累积到1.7GB的RAM,并给我一个内存错误。
我认为,这样做的方式并不是最有效的,但我对内存管理的挣扎(来自Java背景)仍然需要他们的学习时刻
有任何提示可以解决这个问题吗?
提前谢谢!