调用 Release 时出现 Direct3D9 异常
Direct3D9 Exception when calling Release
当我在 Direct3D9 接口上调用 Release() 时,程序立即停止,在调试器下,我得到以下输出:
VERIFIER STOP 00000900: pid 0x570: A heap allocation was leaked.
在我的代码中,我以这种方式创建和释放 D3D9 接口:
IDirect3D9 *pD3D = Direct3DCreate9( D3D_SDK_VERSION );
// Do some work...
pD3D->Release();
pD3D = nullptr;
在接口创建和释放之间,我可以正常使用。
这是我第一次遇到这样的事情,我完全不知道哪里出了问题。这可能是我的 DirectX 安装有问题,但我有其他软件使用 Direct3D9 运行 没有任何问题。
您似乎已将 "Application Verifier" 附加到您的 EXE。 Appverif 检查内存泄漏并发现了一个。如果您阅读了完整的输出,appverif 会为您提供泄漏分配的堆栈跟踪。您可以通过使用 WinDbg 和 运行 命令 dps STACKTRACE_ADDRES
调试您的 EXE 来显示它。
内存泄漏可能来自您的 //do some work...
代码,也许您忘记释放引用的 d3d 对象。图形驱动程序也会导致 appverif 检测到内存泄漏,在这种情况下,只需从 appverif 中删除您的 EXE。
最后 Windbg 会告诉你罪魁祸首。
当我在 Direct3D9 接口上调用 Release() 时,程序立即停止,在调试器下,我得到以下输出:
VERIFIER STOP 00000900: pid 0x570: A heap allocation was leaked.
在我的代码中,我以这种方式创建和释放 D3D9 接口:
IDirect3D9 *pD3D = Direct3DCreate9( D3D_SDK_VERSION );
// Do some work...
pD3D->Release();
pD3D = nullptr;
在接口创建和释放之间,我可以正常使用。
这是我第一次遇到这样的事情,我完全不知道哪里出了问题。这可能是我的 DirectX 安装有问题,但我有其他软件使用 Direct3D9 运行 没有任何问题。
您似乎已将 "Application Verifier" 附加到您的 EXE。 Appverif 检查内存泄漏并发现了一个。如果您阅读了完整的输出,appverif 会为您提供泄漏分配的堆栈跟踪。您可以通过使用 WinDbg 和 运行 命令 dps STACKTRACE_ADDRES
调试您的 EXE 来显示它。
内存泄漏可能来自您的 //do some work...
代码,也许您忘记释放引用的 d3d 对象。图形驱动程序也会导致 appverif 检测到内存泄漏,在这种情况下,只需从 appverif 中删除您的 EXE。
最后 Windbg 会告诉你罪魁祸首。