私は Visual Studio 2008 を使用しており、OpenGL ウィンドウを開発しています。スケルトンを作成するためのクラスをいくつか作成しました。1 つはジョイント用、もう 1 つはスキン用、もう 1 つはボディ用 (複数のジョイントとスキンのホルダー)、もう 1 つはスケル/スキン ファイルを読み取るためです。
各クラス内で、ほとんどのデータにポインターを使用しています。そのほとんどは = new int[XX] を使用して宣言されています。delete[XX] を使用してポインタを削除する各クラスのデストラクタがあります。
GLUT 表示関数内で、本体を宣言し、ファイルを開いて描画し、表示の最後で本体を削除します。しかし、プログラムのどこかにまだメモリ リークがあります。時間が経つにつれて、メモリ使用量が一定の割合で増加し続けます。これは、削除されていないものとして解釈しています。
Body クラスを削除していないだけの glut display 関数の何かなのか、それとも何か他のものなのか、私にはわかりません。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;
}