0 votes

Le code fuit la mémoire, il semble provenir de ID3DXBuffer, je ne sais pas pourquoi.

Je charge un shader avec ce qui suit :

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() ;

e HR(D3DXCreat L "Shader.fx", 0, 0, D3DXSHADER_DEBUG, 0, effect, &errors)) ; } else break ; }

Ce dernier essaie de charger un shader et s'il obtient une erreur ou un avertissement, il essaie encore 3 fois avant d'abandonner.

J'ai constaté que lorsque je ferme l'application, D3DX m'envoie le message suivant :

D3DX : FUITES DE MÉMOIRE DÉTECTÉES : 2 allocations non libérées (486 octets)

et cela ne se produit QUE lorsqu'il y a des erreurs (c'est-à-dire qu'il entre dans la boucle). Je ne sais vraiment pas pourquoi cela se produit, des idées ?

OK, j'ai corrigé le problème, c'était juste un problème de logique, 'error' n'a pas eu 'release' appelé sur lui au troisième essai, d'où le problème.

2voto

Guns Points 21

Note : ID3DXBuffer doit être libéré même si la fonction DX (ex. D3DXCreateEffectFromFile) n'a pas échoué.

0voto

soshiki Points 4158

OK, j'ai corrigé le problème, c'était juste un problème de logique, 'error' n'a pas eu 'release' appelé sur lui au troisième essai, d'où le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X