Código de fugas de memoria, parece provenir de ID3DXBuffer
-
05-07-2019 - |
Pregunta
Carga un shader con lo siguiente:
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;
}
Lo que está intentando cargar un sombreado y si recibe un error / advertencia, lo intenta de nuevo 3 veces más antes de rendirse.
Ahora, cuando cerré la aplicación, D3DX me da el siguiente mensaje:
D3DX: FUGAS DE MEMORIA DETECTADAS: 2 asignaciones no liberadas (486 bytes)
y esto SOLAMENTE sucede cuando hay errores (es decir, entra en el bucle). Realmente no estoy seguro de por qué sucede esto, ¿alguna idea?
OK, lo arreglé, era solo un problema de lógica, 'error' no tenía 'release' en el tercer intento, por lo tanto, el problema.
Solución 2
OK, lo arreglé, era solo un problema de lógica, 'error' no tenía 'release' en el tercer intento, por lo tanto, el problema.
Otros consejos
Nota: ID3DXBuffer debe liberarse incluso cuando la función DX (por ejemplo, D3DXCreateEffectFromFile) no ha fallado.