2
  1. IDirect3DVertexDeclaration9関数によって割り当てられた2 つのオブジェクトFindNextValidTechnique()は解放されますが、破棄されません。PIX では、ステータス「App Refs」は「0」ですが、ステータス「Destruction」は「Never」です。
  2. アプリケーションによって割り当てられたIDirect3DIndexBuffer9オブジェクトは解放されますが、破棄されません。PIX では、ステータス「App Refs」は「0」ですが、ステータス「Destruction」は「Never」です。関数 を呼び出した後SetIndices(NULL)、インデックス バッファのメモリ リークがなくなりました。
  3. 関数によって割り当てられたIDirect3DVertexShader9およびオブジェクトは解放されますが、破棄されません。PIX では、ステータス「App Refs」は「0」ですが、ステータス「Destruction」は「Never」です。ただし、 と を呼び出した後、2 つのメモリ リークはなくなります。IDirect3DPixelShader9D3DXCreateEffect()SetVertexShader(NULL)SetPixelShader(NULL)
  4. IDirect3DSwapChain9関数で割り当てられたオブジェクトCreateAdditionalSwapChain()は解放されますが、破棄されません。GetBackBuffer()が呼び出されることはありますが、Surface は後でリリースされます。PIX では、それらのステータス「App Refs」は「0」ですが、ステータス「Destruction」は「Never」です。
  5. 当然、IDirect3DDevice9andIDirect3D9オブジェクトは解放されますが、破棄されません。

PIX とアプリケーション内のすべてのオブジェクトの参照カウントを確認しました。どちらも 0 です。メモリ リークがまだ発生する理由はわかりません。SetIndices(NULL)などは必要ないと思います。誰かアドバイスをくれませんか?ありがとうございました。

4

1 に答える 1

0

DirectX コントロール パネルから D3D DLL のデバッグを使用してみてください。「メモリ リーク時にブレーク」をオンにすると、デバッグ出力にコール スタックが表示されます。

于 2012-09-21T21:49:22.150 に答える