[c] malloc qui deconne

malloc qui deconne [c] - C - Programmation

Marsh Posté le 20-03-2004 à 11:16:20    

Voila,
je decouvre le type union et j ai un léger problème pour les malloc.
 
Voici quelques bouts du code :
 

Code :
  1. Le .c :
  2. union _Value {
  3. GNode* arbre;
  4. guint variable;
  5. void* constante;
  6. };
  7. struct _Term {
  8. size_t flag;
  9. Value* value;
  10. };
  11. Le .h :
  12. typedef union _Value Value;
  13. typedef struct _Term Term;
  14. Le fichier de test :
  15. Term* arbre1_root = (Term *)malloc(sizeof(Term));


 
A la compilation il me met ca :
 
test-unification.c: In function `main':
test-unification.c:6: sizeof applied to an incomplete type
 
 
Et je sais pas de quoi ca vient (ptet du void * ds l'union mais ds ce cas je fais comment ?)


Message édité par darkpotpot le 20-03-2004 à 11:25:34
Reply

Marsh Posté le 20-03-2004 à 11:16:20   

Reply

Marsh Posté le 20-03-2004 à 11:39:49    

le typedef union _Value Value; doit être avant la structure _Term (puisqu'elle utilise Value qui n'est pas encore défini).
 
heu dans le .H tu dois avoir toutes les définitions de structures.
 
et ton union _Value, tu est sûr d'avoir compris le principe de l'union ? (=recouvrement mémoire quand tu modifies variable tu modifies arbre et constante)

Reply

Marsh Posté le 20-03-2004 à 11:41:17    

Ce n'est pas un problème de malloc ça :/
 
Le code que tu donnes est assez réduit mais rien qu'à voir que la definition des types est en partie dans un fichier .c et en partie dans un fichier .h suffit a voir l'erreur. Met tout dans le fichier .h

Reply

Marsh Posté le 20-03-2004 à 11:45:00    

arf vi, en mettant tout dans le .h ca marche
merci  :)

Reply

Marsh Posté le 20-03-2004 à 12:32:08    

super titre sinon ... d'habitude on a droit a ce genre de truc quand ça segfault, mais tiens ça compile pas, c'est la faut à malloc  
 
bien vu

Reply

Marsh Posté le 20-03-2004 à 12:32:44    

sinon, pour ton flag, il faut utiliser une enum et pas un size_t

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed