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 に答える