(新)每次绘制一个新的OpenGL图形都会增加内存,尽管前一个图形已经更新了,但内存还是增加,请问为什么内存无法自动释放?
我的问题主要是内存无法释放的问题,请大家耐心看一下我的问题描述。我用的是基于C++的QT平台和OpenGL开发一个绘制地震数据的图形(图形最终就是由很多个多边形组成的)。首先我需要从文件里面读入数据,我用动态的二维数组存储这些值,然后根据数组的值画出图形。在我的程序里面画图的具体过程是这样的:我画图的函数是:makeObjectCMPSlice();在这个函数里面使用OpenGL提供的glBegin(GL_TRIANGLE_STRIP)的方法画图,函数的返回值是一个GLuint型,因为我使用了OpenGL的显示列表。所以我定义了一个GLuint类型的变量objectCMPSlice=makeObjectCMPSlice(),这个函数没有什么问题。然后在PaintGL() 函数中调用这个显示列表,glCallList( objectLineSlice ); 当我要绘制图形时,执行以下语句objectCMPSlice=makeObjectCMPSlice();则绘制图形正确,改变参数再绘制新的图也正确,但是现在的问题是每次执行完 objectCMPSlice=makeObjectCMPSlice();updateGL() 语句后,我写了释放了二维数组的语句。但是每换一个图形时内存并没有减少,而是一直增加下去,直到耗完内存程序终止。如果我把语句objectCMPSlice=makeObjectCMPSlice()隐掉,内存是可以释放掉的(当然图形就出不来了)。所以我一直不知道是什么问题,请大家帮忙分析一下吧,谢谢了!如果我有些没有说清楚的地方,请大家提醒一下。
[解决办法]
会不会是二维数组的释放问题:
int **ptr;
//ptr[fir][sec];
for (int n=0; n<fir; n++)
{
delete[] ptr[n];
}
[解决办法]
根据你的描述我估计和数组本身无关,应该是在“objectCMPSlice=makeObjectCMPSlice()”画图的时候,
就像GDI里面画图一样,引用一个句柄或者某个对象都需要相应的DeleteObject或者Release来释放它,
在OpenGL下可能也是同样道理,在你画图过程中是否忘记释放某些东西,你可以仔细察看一下。