调用 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 会告诉你罪魁祸首。