2
  1. IDirect3DVertexDeclaration9函数分配的两个对象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”。但是,在我调用and之后,两者的内存泄漏就消失了。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 控制面板使用 Debug D3D DLL,打开“Break on Memory Leaks”,您将在调试输出中看到调用堆栈。

于 2012-09-21T21:49:22.150 回答