Le code laisse échapper de la mémoire, semble provenir de ID3DXBuffer
-
05-07-2019 - |
Question
Je charge un shader avec les éléments suivants:
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;
}
Qui essaie de charger un shader et s'il obtient une erreur / un avertissement, il réessaye encore trois fois avant d'abandonner.
Maintenant, lorsque j'ai fermé l'application, D3DX m'a donné le message suivant:
D3DX: FUITES DE MÉMOIRE DÉTECTÉE: 2 attributions sans licence (486 octets)
et cela se produit UNIQUEMENT lorsqu'il y a des erreurs (c'est-à-dire que cela passe dans la boucle). Je ne sais vraiment pas pourquoi cela se produit, des idées?
OK, je l'ai corrigé, c'était juste un problème de logique. Erreur n'a pas été appelé "release" à la troisième tentative, d'où le problème.
La solution 2
OK, je l'ai corrigé, c'était juste un problème de logique. Erreur n'a pas été appelé "release" à la troisième tentative, d'où le problème.
Autres conseils
Remarque: ID3DXBuffer doit être publié même lorsque la fonction DX (par exemple, D3DXCreateEffectFromFile) n’échoue pas.