【发布时间】:2011-02-05 19:29:39
【问题描述】:
我正在使用 Visual Studio 2008,开发 OpenGL 窗口。我创建了几个用于创建骨架的类,一个用于关节,一个用于皮肤,一个用于 Body(它是多个关节和皮肤的支架),还有一个用于读取 skel/skin 文件。
在我的每个类中,我对大部分数据都使用了指针,其中大部分是使用 = new int[XX] 声明的。我为每个删除指针的类都有一个析构函数,使用 delete[XX]。
在我的 GLUT 显示函数中,我让它声明一个主体,打开文件并绘制它们,然后在显示结束时删除主体。但是程序中的某个地方仍然存在内存泄漏。随着时间的推移,它的内存使用量只会以一致的速度不断增加,我将其解释为不会被删除的东西。
我不确定是不是在 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;
}
来自正文:
Body::Body(){
skelFile = string();
skinFile = string();
totalJoints = 0;
joints = new Joint[25];
skin = new Skin;
}
Body::~Body(){
delete[25] joints;
delete skin;
}
【问题讨论】:
-
请停止编码并阅读 Scott Meyers 的 Effective C++ 第 3 版。我并不是要刻薄,但我很想创建一个长答案,以解决您的一些编码错误和不良做法。 Scott Meyers 的书将帮助您更好地编写代码。特别是第 4 项和第 14 项。
-
会的。抱歉,我已经很久没有学 C++了,我们学校现在只教 Java(糟透了,对吧?)而且老师强迫我们使用 C/C++,而没有先给我们展示任何东西。我
标签: c++ opengl memory-management memory-leaks freeglut