Partage
  • Partager sur Facebook
  • Partager sur Twitter

Perte mémoire due à la SDL

    12 décembre 2018 à 10:52:53

    Bonjour!

    Je suis en train de faire un petit jeu, j'utilise SDL 1.2, j'ai bien fais attention à la mémoire, j'ai aucune fuite mémoire (merci Valgrind) mise-à-part ceci

    ==12336==    definitely lost: 40 bytes in 4 blocks
    ==12336==    indirectly lost: 352 bytes in 8 blocks

    et c'est forcément dû à la SDL, est-ce que qqn aurait une solution pour arriver à 0 perte mémoire?

    Merci :D

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2018 à 14:17:36

      Salut,

      Tu as bien fait un SDL_Quit à la fin ?

      Car il est possible que SDL garde en interne des variables globales.

      SDL_Surface *SDL_GetVideoSurface(void);

      Tu as au moins cette fonction la qui doit s'appuyer sur une globale.

      Si SDL est bien fait, alors SDL_Quit devrait tout nettoyer.

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        12 décembre 2018 à 14:34:51

        voici ma fonction de destruction pour sdl

        void destroySDL(SDL* sdl) {
          SDL_FreeSurface(sdl->screen);
          SDL_Quit();
          free(sdl);
        }


        Tous mes free sont fait dans le bon ordre, aucune fuite mémoire et Valgrind ne m'indique aucune fuite "réparable" mais uniquement des info concenant sdl (quand je free mal qq chose, valgrind pointe une ligne)

        -
        Edité par Clément Colné 12 décembre 2018 à 14:35:38

        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2018 à 14:56:59

          Alors je ne sais pas si ça corrige le soucis, mais si screen a été créé par SDL_SetVideoMode, il ne faut pas le désallouer :

          https://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlsetvideomode.html

          "The surface returned is freed by SDL_Quit() and should nt be freed by the caller."

          SDL s'en charge.

          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            12 décembre 2018 à 15:15:28

            En effet, que je free ou non, ma perte mémoire n'est pas augmentée, mais pas réduite non plus, j'ai toujours cette même perte :/ à vrai dire ce n'est pas réellement important en soit, mais comme c'est un projet noté dans ma licence la gestion mémoire est très importante haha
            • Partager sur Facebook
            • Partager sur Twitter
              12 décembre 2018 à 15:48:58

              Essaie, pour voir, de faire un projet minimaliste : 

              Tu inclus juste SDL dans un premier temps avec un main vide, tu testes valgrind

              Puis tu fais juste un Init et un Quit pour voir...

              Puis tu rajoutes progressivement des trucs avec les fonctions que tu utilises.

              Et tu verras bien à quel moment le memory leak apparait ?

              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                12 décembre 2018 à 17:29:30

                j'ai testé, tout provient d'ici

                  SDL_Init(SDL_INIT_VIDEO);



                • Partager sur Facebook
                • Partager sur Twitter
                  12 décembre 2018 à 19:04:15

                  Si tu fais juste un init et un SDL_Quit (important) il y a des fuites ?
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    13 décembre 2018 à 17:36:36

                    Oui toujours, apparemment il n'y a pas de solution, tant pis :D

                    merci quand même!

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Perte mémoire due à la SDL

                    × 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