Bonjour à tous,

Voilà, cette fois j'ai bien repéré ma fuite de mémoire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
if(!(font=TTF_RenderText_Solid(fontTTF,s.c_str(),color)))
j'ai rajouté cette ligne avant toutes les autres:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)?