1

描画に OpenGL を使用する C++ Windows アプリケーションをテストすると、次の問題が発生しました。テストには、GlowCode 9.1 プロファイラーを使用しました。

アプリケーションの終了後、メソッドGDI32!ChoosePixelFormatが 6 MB を超える大量のメモリをリークしたことが示されます。

アプリケーションは、openGL 仕様に従ってすべてのリソースを閉じます。つまり、以下を呼び出します。

wglMakeCurrent(iMainHDC, NULL);
wglDeleteContext(iMainHRC);
wglMakeCurrent(iHSHDC, NULL);
wglDeleteContext(iHSHRC);   
DeleteGDI(iHSGDIBackBufferBitmap, iHSGDIBackBufferDC);
DestroyWindow(iHSWindowHandle);
DeleteGDI(iMainGDIBackBufferBitmap, iMainGDIBackBufferDC);
DestroyWindow(iMainWindowHandle);

そのため、リソースの破棄を忘れてはいけません。

このメモリ リークを取り除くために、他の割り当て解除手順を実行する必要がありますか?

私の目的は、終了時にアプリケーションが 0 バイトをリークするようにすることです。これはまったくできますか?または、Windows グラフィックス ライブラリは、シングルトンなどとして割り当てられた一部のデータを保持しますか?

ローカルのグラフィックス ドライバーに問題があるだけでしょうか?

4

0 に答える 0