Код утечки памяти, кажется, идет от ID3DXBuffer - PullRequest
0 голосов
/ 27 ноября 2009

Я загружаю шейдер со следующим:

ID3DXBuffer* errors = 0;
ID3DXEffect* effect = 0;

HR(D3DXCreateEffectFromFile(
    gd3dDevice,  L"Shader.fx", 0, 0,
    D3DXSHADER_DEBUG|D3DXSHADER_SKIPOPTIMIZATION,
    0, &effect, &errors));

for (int i = 0; i < 3; i++)  {
    if(errors) {
        errors->Release();
        if (effect)
            effect->Release();

        errors = 0;
        HR(D3DXCreateEffectFromFile(gd3dDevice, L"Shader.fx", 
            0, 0, D3DXSHADER_DEBUG, 0, effect, &errors));
    }
    else
        break;
}

Который пытается загрузить шейдер, и если он получает сообщение об ошибке / предупреждении, он повторяет попытку еще 3 раза, прежде чем сдаться.

Теперь я обнаружил, что когда я закрываю приложение, D3DX выдает мне следующее сообщение:

D3DX: ОБНАРУЖЕНА УТЕЧКА ПАМЯТИ: 2 несвязанных выделения (486 байт)

, и это ТОЛЬКО происходит, когда есть ошибки (то есть это входит в цикл). Я действительно не уверен, почему это происходит, какие-нибудь идеи?

ОК. Я исправил это, это была просто логическая проблема, у «ошибки» не было вызова «релиз» с третьей попытки, следовательно, проблема.

Ответы [ 2 ]

2 голосов
/ 04 января 2010

Примечание: ID3DXBuffer должен быть освобожден, даже если функция DX (например, D3DXCreateEffectFromFile) не завершилась.

0 голосов
/ 28 ноября 2009

ОК. Я исправил это, это была просто логическая проблема, у «ошибки» не было вызова «релиз» с третьей попытки, следовательно, проблема.

...