Liberation de memoire en c

vieulo -  
ariock Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   -
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

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
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
ariock Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   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