Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2761 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problème désallocation mémoire (résolu)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème désallocation mémoire (résolu)

n°893306
nast
Posté le 08-11-2004 à 14:24:34  profilanswer
 

Salut :)
 
J'ai un problème après une désallocation mémoire d'une structure de données : caractères bizarres et je comprends pas pourquoi :(
 
Voilà mon code :
 
la structure de données :

Code :
  1. typedef struct Ligne {
  2.   char * chaine;
  3.   int taille;
  4. } ligne;


 

Code :
  1. #define FREE(x) { if (x) free(x); x = NULL; }
  2. ligne * creation (int longueur)
  3. {
  4.   ligne * uneLigne;
  5.   uneLigne = (ligne *) malloc (sizeof(ligne));
  6.   uneLigne->chaine = (char*) malloc (longueur * sizeof(char));
  7.   uneLigne->taille = longueur;
  8.   return uneLigne;
  9. }
  10. void destruction (ligne * uneLigne)
  11. {
  12.   FREE(uneLigne->chaine);
  13.   FREE(uneLigne);
  14. }


 
 
La fonction qui permet d'afficher le contenu d'une ligne :

Code :
  1. void afficheStructLigne(ligne * maLigne){
  2.   if (maLigne != NULL){
  3.     printf("*** Structure ligne ***\n" );
  4.     printf("   Taille        : %d \n",maLigne->taille);
  5.     printf("   Contenu       : %s", maLigne->chaine);
  6.    }else{
  7.     printf("*** Structure ligne ***\n" );
  8.     printf("\tVide\n" );
  9.     }
  10. }


Le résultat quand je veux afficher le contenu d'une ligne devrait être null mais il m'affiche n'importe quoi :

Code :
  1. *** Structure ligne ***
  2.    Taille        : 1075192760
  3.    Contenu       : °#@°#@@@À#@À#@È#@È#@Ð#@Ð#@Ø#@Ø#@à#@à#@è#@è#@ð#@ð#@ø#@ø#@


 
Merci de m'aider ;)


Message édité par nast le 08-11-2004 à 15:32:29
mood
Publicité
Posté le 08-11-2004 à 14:24:34  profilanswer
 

n°893343
couak
Posté le 08-11-2004 à 15:03:42  profilanswer
 

euh c'est quoi le problème ? c'est quand tu veux afficher une ligne qui est nulle ?
Si c'est le cas c'est normal, car quand tu déclare une ligne et que tu ne l'as pas encore initialisée (i.e. pas encore fait de malloc) l'OS lui attribue un emplacement mémoire déclaré comme libre, et il se peut qu'il y ait des résidus, d'où l'importance de toujours initialiser lorsque l'on veut utiliser la variable

n°893356
Taz
bisounours-codeur
Posté le 08-11-2004 à 15:09:57  profilanswer
 

c'est bien et alors ? t'as rien compris aux pointeurs. le passage de paramètre en C se fait par copie. T'auras beau passer un ligne*, ça mettra pas ton truc à NULL dans le contexte appelant.

n°893364
nast
Posté le 08-11-2004 à 15:23:05  profilanswer
 

Taz -> en effet, je viens d'essayer de mettre mon free directement dans le programme main et ça roule :) Le problème vient donc bien du passage de paramètre par copie.
 
Comment je peux faire une fonction de destruction dans l'esprit de ce que j'ai fait plus haut ?

n°893373
nast
Posté le 08-11-2004 à 15:29:52  profilanswer
 

c'est bon c'est résolu :)
j'ai changé ma fonction destruction par :
 

Code :
  1. ligne* destruction (ligne * uneLigne)
  2. {
  3.   FREE(uneLigne->chaine);
  4.   FREE(uneLigne);
  5.   return uneLigne;
  6. }


 
merci

n°893394
Moktar1er
No one replies...
Posté le 08-11-2004 à 15:48:38  profilanswer
 

et si tu passais un ligne ** tout simplement?
au moins là tu pourras le modifier ton pointeur [:spamafote]

n°893397
Taz
bisounours-codeur
Posté le 08-11-2004 à 15:54:16  profilanswer
 

je vois pas l'intérêt
 
tu fais  
 
desstruction(ma_ligne); ma_ligne = NULL; si nécessaie


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problème désallocation mémoire (résolu)

 

Sujets relatifs
Problème sur preload "pourcentage" !!![JAVA][RESOLU] expression régulière
Probleme de DLL...probleme dans mon programme
[Avis] Coder en C sous OS X , pas de probleme ?Problème sur un algorithme (le vrai!!!)
Problème sur un algorithme[VBA] excel et userform [ résolu ]
Probleme de liste de choix en html[VB] Tout résolu sauf une dernière pertinente ^^
Plus de sujets relatifs à : problème désallocation mémoire (résolu)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR