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

  FORUM HardWare.fr
  Programmation
  C

  malloc, free et structures

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

malloc, free et structures

n°676086
xav14
Posté le 17-03-2004 à 13:09:55  profilanswer
 

voila un bout de coude qui m'envoie un segfault à l'appel du destructor
 

Code :
  1. typedef struct Light {
  2. int  id;
  3. ...
  4. } *Light;
  5. Light lightConstructor(int id) {
  6. l=(Light) malloc (sizeof(struct Light));
  7. ...
  8. }
  9. void lightDestructor(Light *l) {
  10. free(l);
  11. }
  12. void foo(void) {
  13. Light l;
  14. l=lightConstructor(1);
  15. ...
  16. lightDestructor(&l);
  17. exit(0);
  18. }


 
il y a un problème sur mon destructor ou sur mon appel ou les 2 ?
 
merci pour les réponses :jap:


Message édité par xav14 le 17-03-2004 à 13:34:52
mood
Publicité
Posté le 17-03-2004 à 13:09:55  profilanswer
 

n°676091
Osama
Posté le 17-03-2004 à 13:15:36  profilanswer
 

Voilà pourquoi les langages impératifs cai le mal :jap:

n°676094
xav14
Posté le 17-03-2004 à 13:19:15  profilanswer
 

merci pour le troll
(je programme en java normalement mais là il faut que je fasse un truc en c, et mes souvenirs sur les pointeurs sont un peu vagues)

n°676102
pascal_
Posté le 17-03-2004 à 13:29:17  profilanswer
 

l doit être un pointeur sur une struct.
Or, toi tu le déclare comme "Light l;"
Quand tu fais  lightDestructor(&l); tu essayes de détruire une struct qui n'est pas alloué dynamiquement => plantage
 
Il faut écrire "Light *l;" et "lightDestructor(l);"

n°676104
xav14
Posté le 17-03-2004 à 13:33:41  profilanswer
 

bah le type Light est un pointeur sur struct Light ...
 
l est donc bien un pointeur sur une structure.
 
par contre j'ai oublié la ligne :
 
l=lightConstructor(1);
 
(j'édite)

n°676120
pascal_
Posté le 17-03-2004 à 13:47:45  profilanswer
 

Oups, désolé, j'ai lu trop vite.
 
Le code que tu as filé a l'air bon.
Essaye de voir si ça ne vient pas d'ailleurs (dépassement de capactité d'un tableau par exemple)
 
Va voir là pour un pb similaire :  
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0

n°676129
pascal_
Posté le 17-03-2004 à 13:53:33  profilanswer
 

pascal_ a écrit :

Oups, désolé, j'ai lu trop vite.
 
Le code que tu as filé a l'air bon.
Essaye de voir si ça ne vient pas d'ailleurs (dépassement de capactité d'un tableau par exemple)
 
Va voir là pour un pb similaire :  
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
 


 
Argh, je raconte encore des conneries.
Ton code est pas bon.
 
lightDestructor(&l); => tu passes donc un pointeur sur un pointeur de struc Light.
Donc le free(l) essaye de désallouer le pointeur sur ta struct.
 
Edit :  
donc soit tu écris :

Code :
  1. void lightDestructor(Light l) {
  2.   free(l);
  3. }
  4. et
  5. lightDestructor(l)


 
soit  
 

Code :
  1. void lightDestructor(Light *l) {
  2.   free(*l);
  3.   *l = NULL; // par exemple ou *l=0; pour certain
  4. }
  5. et
  6. lightDestructor(&l);


 


Message édité par pascal_ le 17-03-2004 à 13:57:01
n°676355
xav14
Posté le 17-03-2004 à 16:47:34  profilanswer
 

ok
 
il me semblait que ta première solution est celle que j'avais faite au départ :heink:


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

  malloc, free et structures

 

Sujets relatifs
Php - et decompression de fichier ... (Free)Pblm avec fetch_row et free_result
le langage ASP et l'hebergeur FREEProbleme de SetCookie sur multimania et free
Free et les fonctions FTP de PHPtable au format InnoDB et free
[Free] impossible d'utiliser les sessions[C] Suppression d'un avl (multiples structures inside)
Commande Free() et Delete() ca marche quand ca veut? 
Plus de sujets relatifs à : malloc, free et structures


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)