Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin de renseignements pour ma loque

Un chiffon tout doux pour faire briller!

    27 mai 2006 à 20:43:29

    Bonsoir tout le monde :)

    Je voudrais savoir si avec malloc() on est obligé de libérer la mémoire manuellement (avec la fonction free()) ou si, même sans faire free(), la variable serait automatiquement libérée à la fin du programme?

    Si vous n'avez rien compris je vais m'exprimer autrement.
    Dans le code suivant...

    int main(int argc, char *argv[])
    {
        long* memoireAllouee = NULL;
        memoireAllouee = malloc(sizeof(long));
        free(memoireAllouee);

        return 0;
    }


    Est-ce que le free(memoireAllouee); est utile?
    Est-ce que si j'enleve free(), memoireAllouee sera quand même libérée à la fin du programme ?
    Ou bien, free() est seulement utile lorsqu'on veut libérer de la mémoire en cours de programme?

    Merci :D
    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2006 à 20:46:07

      J'en sait rien mais le mieux c'est de toujours libérer la mémoire (ça devient une bonne abitude).
      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2006 à 21:06:20

        LouisClem répondait à cette question dans un autre sujet :)

        Il y disait que dans les OS modernes, la mémoire est libéré toutes seules, mais ca ne coutes rien de rajouter free(c); :D
        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2006 à 21:32:21

          Merci pour vos réponses et j'ai encore une question :

          Peut-on faire free() sur une variable déclarée automatiquement?

          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2006 à 21:40:35

            Non, tu peux pas appeler free() sur une variable ou un tableau statique.

            Il faut toujours appeler free() pour libérer la mémoire, sinon tu as un "trou de mémoire" ou "memory leak", c'est à dire que tu vas utiliser beaucoup de RAM très vite. Faire très attention à ça, car c'est pas évident.
            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2006 à 21:57:56

              Citation : remram44

              Non, tu peux pas appeler free() sur une variable ou un tableau statique.

              Il faut toujours appeler free() pour libérer la mémoire, sinon tu as un "trou de mémoire" ou "memory leak", c'est à dire que tu vas utiliser beaucoup de RAM très vite. Faire très attention à ça, car c'est pas évident.



              Je ne comprends RIEN...

              Tu te contredis. Tu dis qu'on ne peut pas appeler free pour des variables statiques. Or, malloc c'est pareil que les variables statiques appart que c'est déclaré manuellement... Donc ca devrait marcher dans les 2 cas?!

              Ensuite, tu dis qu'il faut toujours utiliser free() pour libérer de la memoire, mais si je veux libérer une mémoire "statique"? Tu viens de dire que ça ne marchait pas...
              • Partager sur Facebook
              • Partager sur Twitter

              Besoin de renseignements pour ma loque

              × 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