メモリの解放について
C++でDirectXを用いたゲームを作成しているのですが、プログラムのコンパイルは通るのに、メモリの解放関数が行われると強制終了されエラーメッセージが出力されます。
デバッグをしてみて要因を調べてみましたが、特に強制終了するような問題があるとも思えないのです。(ただ自分の知識不足であると思いますが)
ためしにエラーが出ている部分をコメントにしてみたら、そしたらヒープが壊れてるとのエラーメッセージが出るのですがどう対処したらいいでしょうか?
ちなみにRELEASEする変数の中身はちゃんと入ってます。
ソース:
const int MAXFONT = 16;
LPD3DXFONT g_pxfonts[MAXFONT];
LPD3DXSPRITE g_ptextsprite = NULL;
int d=0;
void DirectGraphics::CleanupD3D(){
//フォント解放
for(d=0; d<MAXFONT; d++){
if(g_pxfonts[d]!=NULL){
g_pxfonts[d]->Release();//エラー
}
}
if(g_ptextsprite) g_ptextsprite->Release();//エラー
//メッシュ、テクスチャ解放
for(d=0; d<MAXMODEL; d=d+1){
if(g_models[d].used == TRUE){
if(g_models[d].pmaterials != NULL){
delete[] g_models[d].pmaterials;
}
if(g_models[d].ptextures != NULL){
for(DWORD j=0; j<g_models[d].nummaterials; j=j+1){
g_models[d].ptextures[j]->Release();
}
delete[] g_models[d].ptextures;
}
if(g_models[d].pmesh != NULL){
g_models[d].pmesh->Release();
}
}
}
if( g_pd3dDevice != NULL ) g_pd3dDevice->Release();
if( g_pD3D != NULL ) g_pD3D->Release();
}
エラーの出ているフォントの変数の中身はこちらに入れております。
//ゲーム用のフォントを作成
int DirectGraphics::CreateGameFont(LPCTSTR fontname, int height, UINT weight){
//空いている要素を探す
int idx;
for(idx=0; idx<MAXFONT; idx=idx+1){
if(g_pxfonts[idx] == NULL) break;
}
if (idx>=MAXFONT) return -1;
//フォントを作成する
HRESULT hr = D3DXCreateFont( g_pd3dDevice, -height, 0, weight, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, fontname, &g_pxfonts[idx]);
if( FAILED( hr ) ) return -1;
return idx;
}
お礼
ありがとうございます。 勉強になりました。 心配しないようにします。