Когда я вызываю 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, работающее без проблем.
Похоже, вы подключили «Application Verifier» к вашему EXE. Appverif проверяет на утечки памяти, и он нашел один. Если вы прочитаете полный вывод, appverif даст вам трассировку стека утечки выделения. Вы можете отобразить его, отладив свой EXE с помощью WinDbg и запустив команду dps STACKTRACE_ADDRES
,
Утечка памяти может исходить от вашего //do some work...
код, может быть, вы забыли выпустить ссылочный объект d3d. Также бывает, что графические драйверы вызывают утечки памяти, обнаруженные appverif, в этом случае просто удалите ваш EXE из appverif.
В конце концов Windbg расскажет вам виновника.
Других решений пока нет …