【问题标题】:Direct3D9 Exception when calling Release调用 Release 时出现 Direct3D9 异常
【发布时间】:2016-07-04 03:16:35
【问题描述】:

当我在 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 的软件运行没有任何问题。

【问题讨论】:

  • 您在此对象上调用 AddRef 而不是 Release。
  • @immibis 感谢您的回复,但是,我尝试在创建 D3D9 对象后立即释放它,但遇到了同样的问题。另外,这是我的应用程序处理 Direct3D 的唯一部分。
  • 您使用的是什么操作系统?你在使用 Debug Developer Runtime 吗?

标签: c++ com directx direct3d direct3d9


【解决方案1】:

您似乎已将“应用程序验证程序”附加到您的 EXE。 Appverif 检查内存泄漏并找到一个。如果您阅读完整的输出,appverif 会为您提供泄漏分配的堆栈跟踪。您可以通过使用 WinDbg 调试 EXE 并运行命令 dps STACKTRACE_ADDRES 来显示它。 内存泄漏可能来自您的//do some work... 代码,也许您忘记释放引用的 d3d 对象。图形驱动程序也会导致 appverif 检测到内存泄漏,在这种情况下,只需从 appverif 中删除您的 EXE。 最后 Windbg 会告诉你罪魁祸首。

【讨论】:

  • 您对最后一部分的看法是正确的。我尝试在创建 D3D9 对象后立即释放它,但我遇到了同样的问题,从我所见,应用程序验证程序报告的泄漏不在我的应用程序代码中。无论如何,我从应用程序验证器中删除了我的 exe,一切都很好!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2017-10-23
相关资源
最近更新 更多