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 :

Gestion de la mémoire [Débutant(e)]


Sujet :

C++

  1. #21
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Aszarsha Voir le message
    Pas avec des systèmes qui datent de plus d'une dixaine d'années, ok ; et encore...
    M'enfin tous les systèmes actuels le font sans aucun probleme, et je ne pense pas que jo_le_coco vise Win9x.

    Une fuite mémoire ne se passe que lors de l'execution du programme, à sa terminaison, toute les resources sont automatiquement recupérés par le système (à moins de programmer pour de très vieux systemes, comme dit plus haut).
    tu me rassure.

  2. #22
    Membre éprouvé Avatar de Polyfructol
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2007
    Messages : 131
    Par défaut
    Avec SDL les fuites de mémoires sont souvent dues aux chargements d'images à répétition. Es-tu sûr que tu n'utilises pas SDL_LoadBMP en boucle ?

    De cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SDL_Surface *surface;
    surface = SDL_LoadBMP("test.bmp"); <-- 1ère allocation
    ...
    surface = SDL_LoadBMP("test.bmp"); <-- 2ème allocation
    ...
    SDL_FreeSurface(surface); <-- désallocation de la 2ème et pas de la 1ère
    --> fuites de mémoire

    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SDL_Surface *surface;
    surface = SDL_LoadBMP("test.bmp");
    ...
    SDL_FreeSurface(surface);
    surface = SDL_LoadBMP("test.bmp");
    ...
    SDL_FreeSurface(surface);
    Bon je peux me tromper ça fait quelque temps que je n'ai pas touché à la SDL, mais j'en suis quasiement sûr.

  3. #23
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Erreur qu'une classe bien codée ne permet plus de faire.

  4. #24
    screetch
    Invité(e)
    Par défaut
    tu utilises quel compilateur/debuggeur ?

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par screetch Voir le message
    tu utilises quel compilateur/debuggeur ?
    J'utilise Code::Blocks et son débuggeur intégré. J'ai vu aussi récemment la news sur "DDD", je ne sais pas si ça pourrait m'aider...

    En ce qui concerne l'allocation d'une surface SDL en boucle, je pense plutôt que ça doit être l'appel en boucle d'une méthode qui alloue, vu que je ne suis pas encore tout à fait à l'aise avec le mécanisme des classes. En tout cas, je ne trouve pas l'erreur.

    Je peux vous donner le code source si vous voulez, il n'est pas très long. Bon quand même je vous préviens : il doit y avoir plein de maladresses, ou d'erreurs de programmation, dues notamment aux dernières modifications que j'ai faites pour chercher à résoudre le problème. Et également, je ne vérifie pas que mes allocations fonctionnent bien, je comptais le faire à la fin. Enfin bref voilà la source (avec images, projet Code::Blocks et exécutable) : http://kokospace.free.fr/autres/jodowsmediaplayer.zip

    Si quelqu'un arrivait à trouver l'erreur (ou les erreurs ?), ce serait vraiment chouette. A mon avis, il doit y avoir une histoire de classes. Mais de toute façon, je vais certainement recoder le tout avec des classes bien robustes

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    En regardant vite fait ton code, dans la fonction,
    void DialogOpen::dessiner(SDL_Event *event), je n'est pas trouvé la destruction de rectangle.


    Sinon, juste une remarque, dans la fonction void Dialog::dessiner(), est tu vraiment obligé de recharger tes images stockées dans le tableau fenetre?

  7. #27
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    En regardant vite fait ton code, dans la fonction,
    void DialogOpen::dessiner(SDL_Event *event), je n'est pas trouvé la destruction de rectangle.
    Ah mais bien sûr ! La voilà, l'erreur J'ai pensé à détruire la surface dans le destructeur, et je n'ai pas pensé à le faire à chaque appel de la fonction... Maintenant que ça marche, c'est merveilleux...

    Enfin bien sûr, il subsiste toujours quelques fuites de mémoires, bien moins importantes, mais bon... Je vais donc essayer ces fameux RAII.

    Citation Envoyé par Mongaulois Voir le message
    Sinon, juste une remarque, dans la fonction void Dialog::dessiner(), est tu vraiment obligé de recharger tes images stockées dans le tableau fenetre?
    Euh en fait c'est une de ces modifications dont je parlais. Je me suis dit que le problème aurait pu venir de là, et j'ai évité de garder quoi que ce soit en mémoire


    Enfin bon le problème est résolu, et je vous remercie tous pour votre précieuse aide

  8. #28
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par jo_le_coco Voir le message
    Ah mais bien sûr ! La voilà, l'erreur J'ai pensé à détruire la surface dans le destructeur, et je n'ai pas pensé à le faire à chaque appel de la fonction... Maintenant que ça marche, c'est merveilleux...

    Enfin bien sûr, il subsiste toujours quelques fuites de mémoires, bien moins importantes, mais bon... Je vais donc essayer ces fameux RAII.

    Euh en fait c'est une de ces modifications dont je parlais. Je me suis dit que le problème aurait pu venir de là, et j'ai évité de garder quoi que ce soit en mémoire


    Enfin bon le problème est résolu, et je vous remercie tous pour votre précieuse aide
    C'est une type erreur assez récurrente, et pas facile à trouver. Surtout quand on mélange du C dans du C++.
    Par contre il n'existe de bonne interface C++ de la SDL??

  9. #29
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    C'est une type erreur assez récurrente, et pas facile à trouver. Surtout quand on mélange du C dans du C++.
    Par contre il n'existe de bonne interface C++ de la SDL??
    Euh c'est une bonne question Ce serait en effet bien utile, notamment à cause de tous les ".c_str()" que je suis obligé d'utiliser à tout bout de champ...

    Mais apparemment il n'y en a pas (officiellement en tout cas) :
    Citation Envoyé par http://www.libsdl.org/
    SDL is written in C, but works with C++ natively
    Mais de toute façon, les RAII facilitent considérablement les choses. J'ai déjà implémenté une ébauche de classe RAII pour les surfaces SDL, et le code du main est trente fois plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RAII_Surface image("images/test.bmp");
    image.setColorKey(32,59,84);
    image.setAlpha(128);
    image.fill(255,255,0);
    image.blit(ecran, 30, 30);

  10. #30
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut
    Il y a la SFML qui est semblable à la SDL mais en orienté objet.

  11. #31
    Invité
    Invité(e)
    Par défaut
    Oui, j'en ai entendu parler, mais (je me trompe peut-être) ça me semble moins complet que la SDL. Ce qu'il y a de bien, c'est qu'on peut ouvrir plusieurs fenêtres

  12. #32
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut
    Moi justement je trouve ça plus complet que la SDL (mais bon, je connais pas vraiment toutes les fonctions de la SDL), et il faut pas oublier que le projet est jeune et qu'il va s'étoffer au fil du temps.

  13. #33
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    De plus, SFML est developpé principalement par un des membres du forum, Laurent "Loulou" Gomila pour ne pas le citer ; ce qui assure un service après-téléchargement du tonerre !

    Et si tu veux voir du code très bien ecrit en C++, il te suffira d'aller regarder du côté des sources en plus !

  14. #34
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Aszarsha Voir le message
    De plus, SFML est developpé principalement par un des membres du forum, Laurent "Loulou" Gomila pour ne pas le citer ; ce qui assure un service après-téléchargement du tonerre !

    Et si tu veux voir du code très bien ecrit en C++, il te suffira d'aller regarder du côté des sources en plus !
    Ah je ne savais pas, tout ça

    Bah ça mérite sûrement de s'y intéresser alors. Et puis j'ai vu que la gestion des vidéos est "A venir" En voilà une bonne nouvelle

    Et question puissance, c'est vraiment rapide ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 17
    Dernier message: 02/02/2006, 12h03
  2. gestion de la mémoire
    Par moldavi dans le forum C++
    Réponses: 17
    Dernier message: 04/02/2005, 23h18
  3. Réponses: 11
    Dernier message: 26/12/2004, 22h50
  4. Gestion de la mémoire entre plusieurs DLL
    Par Laurent Gomila dans le forum C++
    Réponses: 7
    Dernier message: 27/07/2004, 15h28
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

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