Liberation de memoire en c

vieulo -  
ariock Messages postés 125 Statut Membre -
je creer un tableau de chaine de car
char** tmp;

j'alloue ensuite de la memoire pour chaque composant de ce tableau
tmp[i] = (char*)alloca(strlen(msg) + 1);

je souhaite liberer liberer la memoire de tmp.
Est ce que un free(tmp); suffit ou je suis oblige de liberer tous les index du tableau avant de liberer tmp

1 réponse

  1. Marden
     
    A ton avis ?

    Les bouts de mémoires alloués n'étant pas nécessairement consécutifs (dans le cas où ils le seraient, le système serait obligé d'en assurer la fusion), la seule soultion est d'effectuer la libération par une boucle (avec temp[indice]).
    Une des erreurs couramment rencontrées, dans le cas de listes chaînées par exemple, est la destruction du pointeur "suivant" préalablement à la demande de libération de l'espace pointé !!!
    0
    1. vieulo
       
      merci bcp

      Mais c'est bizarre
      lorsque je teste la boucle
      si je fais un printf de tmp[0], il renvoit la valeur d'avant la liberation?????
      0
      1. ariock Messages postés 125 Statut Membre 5 > vieulo
         
        Ben normal, la liberation ne veux pas forcement dire que le systeme va recuperer l'espace memoire directement, donc parfois ca donne ca, encore plus fort, avec des pointeur non aloue, tu peux avoir un programme qui tourne... sauf que c'est absolument suicidaire...

        Je suis un gaucher contrariant. C'est plus fort que moi,
        il faut que j'emmerde les droitiers.
        0