1

例如,我循环运行这段代码:

m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
Release(buffer);

其中 m_device 是 ID3D11Device 和 buffer 是 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);

但是内存窃取泄漏。

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

4

1 回答 1

0

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

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

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

于 2012-11-27T11:09:28.473 回答