IASetIndexBuffer内存泄漏的原因

时间:2012-11-24 13:34:27

标签: c++ directx

例如,我在循环中运行此代码:

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);

但记忆窃取泄漏。

是什么原因?这个物体还在哪里?

1 个答案:

答案 0 :(得分:0)

真的,我只是重新启动此代码,没有任何反应,没有泄漏。没有任何改变。这真是奇怪的行为。

在发布此问题之前,总是尝试使用ID3D11DeviceContext :: ClearState方法,但内存窃取泄漏。

无论如何,现在一切都很好。