IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Toujours fuite de mémoire, mais repéré]


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 97
    Points : 69
    Points
    69
    Par défaut [Toujours fuite de mémoire, mais repéré]
    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)?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 97
    Points : 69
    Points
    69
    Par défaut
    j'ai oublié de préciser la signature de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 97
    Points : 69
    Points
    69
    Par défaut
    au passage, comme la fonction renvoit NULL j'ai remplacé ma condition par une égalité avec NULL

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Est-ce que tu utilises SDL_FreeSurface pour détruire l'objet font ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 97
    Points : 69
    Points
    69
    Par défaut
    en cherchant sur la doc de TTF : j'ia trouvé ceci sur ma fonciton :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The caller (you!) is responsible for freeing any returned surface.
    ce qui fait que je fait plutot appel à

    plutot que à

    et ca a l'air de marcher...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fuites massive de mémoire! Mais pourquoi? :/
    Par Spidyy dans le forum Débuter
    Réponses: 5
    Dernier message: 15/06/2009, 22h27
  2. Fuite mémoire? Mais où?
    Par Tuizi dans le forum C#
    Réponses: 24
    Dernier message: 27/02/2008, 10h02
  3. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44
  4. Réponses: 9
    Dernier message: 18/04/2005, 17h14
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo