代码泄漏内存,似乎来自ID3DXBuffer

时间:2009-11-27 08:07:38

标签: c++ memory-management directx d3dx

我使用以下内容加载着色器:

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 个答案:

答案 0 :(得分:2)

注意:即使DX功能(例如D3DXCreateEffectFromFile)没有失败,也应该释放ID3DXBuffer。

答案 1 :(得分:0)

好的我修好了,只是一个逻辑问题,'错误'没有在第三次尝试时发出'释放'因此问题。