Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C++ & SDL] Problème survenant du jour au lendemain (fuite de mémoire?)

Problème au démarrage

    17 août 2007 à 10:10:26

    Bonjour à tous, je travaille avec Code::blocks sous Ubuntu et je tente de développer un casse-brique.
    J'utilise SDL pour la gestion des graphisme, mais le problème ne vient pas de là je pense.

    Mon programme à bien avancé ( ça fait une semaine que je suis dessus :D ), il y a des petits vaisseau des balles, etc je vous passe les détails. J'ai remarqué qu'hier, le jeu marche très bien, mais au bout de 3 minutes le programme ralentit énormement jusqu'a bloquer le système o_O ( est-ce que c'est ce que l'on appelle des fuites de mémoire? ).

    Bon, je voulais avancer dans mon programme et
    j'ai ignoré ce point ( erreur fatale ? :o )


    Aujourd'hui, j'ai la tête remplie d'idées pour améliorer mon programme, j'avais arreté hier sur une erreur. Je lance code::blocks, je lance le programme pour revoir l'erreur et là :

    Pas d'affichage !!! Il ne reste que la fenêtre de la console très très blanche, voire quasiment vide ...


    Voici le code de mon main.c :
    1. #include "define.h"
    2. int main(int argc, char *argv[])
    3. {
    4.     Moteur moteur ;
    5.     SDL_Surface *ecran = moteur.init("./Init/moteur.ini") ;
    6.     if (!ecran)
    7.         return EXIT_FAILURE ;
    8.     FPSmanager manager ;
    9.     SDL_initFramerate(&manager);
    10.     SDL_setFramerate(&manager, 30 ) ;
    11.     SDL_Event event;
    12.     bool continuer = true ;
    13.     while (continuer)
    14.     {
    15.         while(SDL_PollEvent(&event))
    16.         {
    17.             switch(event.type)
    18.             {
    19.                 case SDL_QUIT:
    20.                     continuer = false;
    21.                 break ;
    22.             }
    23.             moteur.evenement(event) ;
    24.         }
    25.         moteur.gereDonnee() ;
    26.         moteur.affichage(ecran) ;
    27.         SDL_framerateDelay(&manager) ;
    28.     }
    29.     moteur.nettoyage() ;
    30.     return EXIT_SUCCESS ;
    31. }


    Bon, je tente de modifier un peu pour voir l'erreur, je teste en modifiant :
    1. int main(int argc, char *argv[])
    2. {
    3.     return 1 ;
    4.     Moteur moteur ;
    5.     SDL_Surface *ecran = moteur.init("./Init/moteur.ini") ;
    6.     if (!ecran)
    7.         return EXIT_FAILURE ;
    8.     FPSmanager manager ;
    9.     SDL_initFramerate(&manager);
    10.     SDL_setFramerate(&manager, 30 ) ;


    La console me demande de taper entree pour arrêter le programme ( encore heureux !! :lol: )

    Ensuite je teste :
    1. int main(int argc, char *argv[])
    2. {
    3.     Moteur moteur ;
    4.     return 1 ;
    5.     SDL_Surface *ecran = moteur.init("./Init/moteur.ini") ;
    6.     if (!ecran)
    7.         return EXIT_FAILURE ;
    8.     FPSmanager manager ;
    9.     SDL_initFramerate(&manager);
    10.     SDL_setFramerate(&manager, 30 ) ;


    Et la, la console est très en colère (elle parle toujours en anglais lorsqu'elle est en colère, lol :p ) :
    Segmentation fault (core dumped)
    Press Enter to continue


    Bon est-ce la fuite de mémoire?...

    je teste ensuite :
    1. int main(int argc, char *argv[])
    2. {
    3.     Moteur moteur ;
    4.     SDL_Surface *ecran = moteur.init("./Init/moteur.ini") ;
    5.     if (!ecran)
    6.         return EXIT_FAILURE ;
    7.     return 1 ;
    8.     FPSmanager manager ;
    9.     SDL_initFramerate(&manager);
    10.     SDL_setFramerate(&manager, 30 ) ;


    Et là, rebelote, une console toute blanche ...

    Je suis vraiment perdu car je ne sais quoi faire !!
    Et si c'est une fuite de mémoire comment la résoudre efficacelent et rapidement ?
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      17 août 2007 à 11:30:04

      Bon, du peu qu'on en voit, cela peut provenir du destructeur de la classe Moteur qui libère quelque chose de non-alloué ou un truc du genre.
      En tout cas, il faut un peu plus de code, surtout celui de la classe Moteur (au moins constructeur et destructeur).
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2007 à 11:31:24

        Utilise un débuggeur pour ce genre d'erreur, c'est le plus simple.
        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          18 août 2007 à 16:25:52

          Désolé d'avoir mis du temps à répondre, problème d'internet ...
          Je pensais que Code::blocks avait un debugger...

          Bon, je me sens tout bête là, je me reveille et relance code::blocks, et ça marche... o_O A ce point là, ça me dépasse complètement... :o

          Par contre, je trouve tout de même quelque chose de très bizarre :
          La première fois que je lance mon programme, code::blocks ne reconnait pas le type moteur, les commandes liées à SDL_gfx, SDL_image, etc...
          Je lance une deuxième fois, ça marche normalement ....
          Ca me fait ça la première fois que je lance le programme une fois que Ubuntu est lancé, les autre fois ça marche (même si je relance code::blocks ....)

          Peut-être est-ce lié au problème d'hier ...

          Merci beaucoups de vous être intéressé à mon problème !!
          • Partager sur Facebook
          • Partager sur Twitter

          [C++ & SDL] Problème survenant du jour au lendemain (fuite de mémoire?)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown