DX9内存泄漏:Release()返回0但未调用DestroyObject

时间:2012-09-12 03:07:15

标签: graphics memory-leaks directx direct3d directx-9

  1. 函数IDirect3DVertexDeclaration9分配的两个FindNextValidTechnique()对象被释放但未被销毁。在PIX中,状态“App Refs”为“0”,但状态“Destruction”为“Never”。
  2. 应用程序分配的IDirect3DIndexBuffer9对象已释放但未销毁。在PIX中,状态“App Refs”为“0”,但状态“Destruction”为“Never”。在调用函数SetIndices(NULL)之后,索引缓冲区的内存泄漏消失了。
  3. 函数IDirect3DVertexShader9分配的IDirect3DPixelShader9D3DXCreateEffect()对象已释放但未被销毁。在PIX中,状态“App Refs”为“0”,但状态“Destruction”为“Never”。但是,在我调用SetVertexShader(NULL)SetPixelShader(NULL)之后,两者的内存泄漏消失了。
  4. 分配了函数IDirect3DSwapChain9的{​​{1}}对象已释放但未被销毁。 CreateAdditionalSwapChain()曾被调用,但Surface稍后会被释放。在PIX中,它们的状态“App Refs”为“0”,但它们的状态“Destruction”为“Never”。
  5. 原因是GetBackBuffer()IDirect3DDevice9对象已释放但未被销毁。
  6. 我检查了PIX和应用程序中所有对象的引用计数。它们都是0.我不知道为什么仍然会发生内存泄漏。我不认为IDirect3D9等是必要的。有人可以给我一些建议吗?谢谢。

1 个答案:

答案 0 :(得分:0)

尝试通过DirectX控制面板使用Debug D3D DLL,打开“Break on Memory Leaks”,你会在调试输出中看到调用堆栈。