たとえば、次のコードをループで実行します。
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);
しかし、メモリ盗用がリークします。
理由は何ですか?このオブジェクトはまだどこにありますか?