在我的DirectX应用程序的末尾,我得到了“Direct3D设备有一个非零引用计数,这意味着一些对象没有被释放”。应用程序很大,而且不是我写的,我怎么去调试哪些资源没有被释放呢?
发布于 2010-06-15 12:43:21
第一步是使用DirectX调试DLL via the DirectX Control Panel。(IIRC,这些是安装DirectX SDK时的可选项目,因此您可能需要安装它们。)
当你下一次运行你的应用程序时,DirectX应该会给你更多关于泄漏的信息。具体地说,您需要查找如下所示的行:
D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug
allocation id ^^^^^^或者,像这样:
Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474)
allocation id ^一旦有了分配id,您就可以通过在DirectX控制面板中设置Break on AllocID设置(或通过设置上面提到的注册表项)来告诉DirectX在程序中发生该分配时中断。
然后,就需要检查调用堆栈,看看涉及到了什么DirectX调用。
发布于 2010-06-15 12:42:26
您可以按照here中的说明使用DirectX控制面板实用程序。选中“在内存泄漏时中断”复选框,然后您可以使用“在AllocID上中断”来查找未释放的资源。
https://stackoverflow.com/questions/3042406
复制相似问题