Nic*_*las 0 c++ opengl memory-leaks memory-management freeglut
我正在使用Visual Studio 2008,开发一个OpenGL窗口.我创建了几个用于创建骨架的类,一个用于关节,一个用于皮肤,一个用于Body(用于多个关节和皮肤),另一个用于读取一个skel/skin文件.
在我的每个类中,我使用指针来处理我的大部分数据,其中大多数是使用= new int [XX]声明的.我使用delete [XX]为每个删除指针的类都有一个析构函数.
在我的GLUT显示功能中,我让它声明一个正文,打开文件并绘制它们,然后删除显示结尾处的正文.但是程序中某处仍然存在内存泄漏.随着时间的推移,它的内存使用量会以一致的速度不断增加,我将其解释为不被删除的内容.
我不确定它是否在过度显示功能中只是不删除Body类或其他东西.我已经按照Visual Studio 2008中的内存泄漏检测步骤进行了操作,它没有报告任何泄漏,但我不能100%确定它是否适合我.我不会精通C++,所以我可能会忽略一些东西,有人能看到它吗?
从主要:
void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Body *body = new Body();
body->readSkel("C:\\skel2.skel");
body->drawBody();
body = new Body();
body->readSkel("C:\\skel1.skel");
body->drawBody();
glutSwapBuffers();
body->~Body();
delete body;
}
Run Code Online (Sandbox Code Playgroud)
来自身体:
Body::Body(){
skelFile = string();
skinFile = string();
totalJoints = 0;
joints = new Joint[25];
skin = new Skin;
}
Body::~Body(){
delete[25] joints;
delete skin;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中:
Body *body = new Body();
body->readSkel("C:\\skel2.skel");
body->drawBody();
body = new Body();
Run Code Online (Sandbox Code Playgroud)
你正在泄漏a,Body因为你没有删除第一个.
还有这个:
body->~Body();
delete body;
Run Code Online (Sandbox Code Playgroud)
太奇怪了.你没有显式调用这样的析构函数 - delete负责调用析构函数.
这段代码:
delete[25] joints;
Run Code Online (Sandbox Code Playgroud)
也很奇怪.正确的形式是:
delete [] joints;
Run Code Online (Sandbox Code Playgroud)
您使用的是非标准语法,25将被忽略.有关更多信息,请参阅此问题.