例如,我在循环中运行此代码:
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
Release(buffer);
其中m_device是ID3D11Device,缓冲区是ID3D11Buffer
没有泄漏 - 我创建了对象,然后将其销毁。
如果我将它附加到管道,就像这样:
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
m_device_context->IASetIndexBuffer(buffer, DXGI_FORMAT_R32_UINT, 0);
Release(buffer);
比内存泄漏开始。
MSDN对IASetIndexBuffer说:“该方法不会保存对传入的接口的引用。因此,应用程序应该注意不要释放设备当前使用的接口。”行。我在附加后重置索引缓冲区:
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
m_device_context->IASetIndexBuffer(buffer, DXGI_FORMAT_R32_UINT, 0);
m_device_context->IASetIndexBuffer(NULL, DXGI_FORMAT_R32_UINT, 0);
Release(buffer);
但记忆窃取泄漏。
是什么原因?这个物体还在哪里?
答案 0 :(得分:0)
真的,我只是重新启动此代码,没有任何反应,没有泄漏。没有任何改变。这真是奇怪的行为。
在发布此问题之前,总是尝试使用ID3D11DeviceContext :: ClearState方法,但内存窃取泄漏。
无论如何,现在一切都很好。