Partage
  • Partager sur Facebook
  • Partager sur Twitter

<C> malloc, free, return : le mix

Comment libérer la variable retournée ?!

Sujet résolu
    8 juin 2006 à 19:32:30

    Bonjour à tous !
    Je suis en train de faire un petit programme (tiens, comme d'habitude), et dans ce programme, j'utilise une fonction.
    Dans cette fonction, je manipule une chaine de caractères. (je vous donne un code ou se trouve le même problème, vous comprendrez mieux)

    char* fonction(void)
    {
      char* chaine = NULL;
      chaine = malloc(456 * sizeof(char));
     
      /*manipulation sur la chaine, j'ai simplifié c'est tout); */

      return chaine;
     
      /*AAhhhhh, la mémoire de chaine n'a pas été libérée !!!
       * mais ce qui suis ne sera pas executé ! */

      free(chaine);
    }


    Comme vous pouvez le voir, je ne sais pas comment utiliser une variable allouée dynamiquement sans avoir une fuite de mémoire, puisque deux cas se posent alors :
    • Soit je retourne la valeur mais je ne peux alors pas librer la méoire puisque ma fonction sera terminée
    • Soit je libère d'abord ma mémoire mais je ne peux alors pas retournée ma valeur, puisqu'elle a été libérée....
    Avez-vous une idée pour résoudre mon problème ? (sachant que je suis contraint d'allouer dynamiquement ma variable)
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 19:59:06

      Il te suffit de libérer là mémoire hors de la fonction.

      Ta fonction retourne une chaine, soit un pointeur qui pointe sur ta zone allouée (dans le cas présent), donc tu peux faire un free dessus aprés avoir fait les traitements.

      à+
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 20:06:15

        :o Et j'y ait pas penser moi-même....

        Bon, bah, merci bien !
        • Partager sur Facebook
        • Partager sur Twitter

        <C> malloc, free, return : le mix

        × 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