2016-07-04 67 views
1

當我在我的Direct3D9接口上調用Release(),程序立即在調試器下,我有以下的輸出停止時:的Direct3D9異常調用釋放

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運行的軟件沒有任何問題。

+0

你在其他地方調用AddRef而不是Release。 – immibis

+0

@immibis感謝您的回覆,但是,我嘗試在創建後立即發佈我的D3D9對象,並且遇到同樣的問題。另外,這是我的應用程序處理Direct3D的唯一部分。 – Punkfloyd

+0

你在使用什麼操作系統?你在使用Debug Developer Runtime嗎? –

回答

1

看起來您已將「Application Verifier」附加到您的EXE中。 Appverif檢查內存泄漏並找到一個。如果您閱讀完整輸出,appverif會爲您提供泄漏分配的堆棧跟蹤。您可以通過用WinDbg調試EXE並運行命令dps STACKTRACE_ADDRES來顯示它。 內存泄漏可能來自您的//do some work...代碼,也許您忘記釋放引用的d3d對象。它也發生圖形驅動程序導致由appverif檢測到的內存泄漏,在這種情況下只是從appverif中刪除您的EXE。 Finaly Windbg會告訴你罪魁禍首。

+0

對於最後一部分你是對的。我嘗試在創建D3D9對象後立即發佈,並且遇到同樣的問題,並且從我所看到的應用驗證程序報告的泄漏未位於我的應用程序代碼中。無論如何,我從應用程序驗證器中刪除了我的exe文件,一切都很好!謝謝 :) – Punkfloyd