例如,我循环运行这段代码:
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);
但是内存窃取泄漏。
是什么原因?这个物体还在哪里?