[Toujours fuite de mémoire, mais repéré]
Bonjour à tous,
Voilà, cette fois j'ai bien repéré ma fuite de mémoire :
Code:
1 2 3 4 5 6 7 8 9 10
| if(!(font=TTF_RenderText_Solid(fontTTF,s.c_str(),color)))
{
//handle error here, perhaps print TTF_GetError at least
}
else
{
int h, w;
TTF_SizeText(fontTTF,s.c_str(),&w,&h);
graphique->blit(font,dest,0,0,x,y,w,h);
} |
font est définit comme étant un SDL_Surface *;
fontTTF est bien initialisée et de type TTF_Font *
color idem mais de type SDL_Color
Ma question est : où se trouve ma fuite ?
J'ai tenté de faire un delete font ne sachant pas si TTF_RenderText_Solid créait automatiquement un nouvel objet. Mais sans bon résultat.
Voici mes test et leurs résultats :
en mettant en commentaire les trois lignes suivant else, rien ne change. Je suppose donc, que tout est dû à la condition :
Code:
if(!(font=TTF_RenderText_Solid(fontTTF,s.c_str(),color)))
j'ai rajouté cette ligne avant toutes les autres:
Code:
font=TTF_RenderText_Solid(fontTTF,s.c_str(),color);
et je vois bien une augmentation des pertes. Je peux donc en conclure que la majorité des pertes proviendrait de là.
Alors je me suis demandé sur s.str(), il renvoit un pointeur sur un objet... qui ne serait pas détruit pas après, serait-ce la source de fuite? apparement non, mais j'ai l'impression qu'il y a une légère modification quand meme.
Pourriez vous m'aider ? par exemple, est ce que la fonction TTF_RenderText_Solid de la librairie TTF pour SDL est propre (qu'elle détruit bien ce qu'elle crée sauf ce qu'elle renvoie)?