probleme de pointeur

probleme de pointeur - C - Programmation

Marsh Posté le 13-12-2005 à 14:12:41    

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:
 

Code :
  1. struct element
  2. {
  3. char c;
  4. char *morse;
  5. struct element* suiv;
  6. };
  7. typedef struct element Element;
  8. typedef Element* Liste;
  9. boolean estVide(Liste l)
  10. {
  11. if (l=NULL) return vrai;
  12. else return faux;
  13. }
  14. void Ajouter_en_Fin(char c,char *m,Liste *l)
  15. {
  16. Liste p=NULL;
  17. Liste q=NULL;
  18. if (estVide(*l)==vrai)
  19. {
  20.  p= (Liste) malloc(sizeof(Element));
  21.  p->c=c;
  22.  p->morse=malloc(strlen(m));
  23.  strcpy(p->morse,m);
  24.  p->suiv=NULL;
  25.  *l=p;
  26. }
  27. else
  28. {
  29.  for(p=*l;p->suiv;p=p->suiv)
  30.  ;
  31.  q= (Liste) malloc(sizeof(Element));
  32.  q->c=c;
  33.  q->morse=malloc(strlen(m));
  34.  strcpy(q->morse,m);
  35.  q->suiv=NULL;
  36.  p->suiv=q;
  37. }
  38. }
  39. void Afficher_liste(Liste l)
  40. {
  41. while(l!=NULL)
  42. {
  43.  printf("Element : %c  %s\n",l->c,l->morse);
  44.  l=l->suiv;
  45. }
  46. }
  47. main()
  48. {
  49. FILE *fp;
  50. char c;
  51. char ligne[100];
  52. char car;
  53. int j;
  54. char *code;
  55. Liste l=NULL;
  56. fp=fopen(FICHIER,"r" );
  57. if(fp==NULL) printf("Fichier existe pas\n" );
  58. else
  59. {
  60.  c=fscanf(fp,"%c %s\n",&car,ligne);
  61.  while(c!=EOF)
  62.  {
  63.   j=strlen(ligne)+1;
  64.   code=(char*) malloc(sizeof(char)*j);
  65.   strcpy(code, ligne);
  66.   /***Travaille sur liste ****/
  67.   Ajouter_en_Fin(car,code,&l);
  68.   /***************************/
  69.   c=fscanf(fp,"%c %s\n",&car,ligne);
  70.  }
  71.  fclose(fp);
  72. }
  73. Afficher_liste(l);
  74. }


Reply

Marsh Posté le 13-12-2005 à 14:12:41   

Reply

Marsh Posté le 13-12-2005 à 14:16:23    

C'est quoi ton soucis de pointeur ?
Ca plante où ?

Reply

Marsh Posté le 13-12-2005 à 14:18:01    

bin la, dans le code, tu vois pas ?

Reply

Marsh Posté le 13-12-2005 à 14:19:37    

rabzouze a écrit :

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:
 

Code :
  1. struct element
  2. {
  3. char c;
  4. char *morse;
  5. struct element* suiv;
  6. };
  7. typedef struct element Element;
  8. typedef Element* Liste;



Essaye, pour faciliter la relecture, de nommer tes types "t_qqchose" ou "qqchose_t" (comme c'est déjà fait dans les headers officiels)

rabzouze a écrit :


Code :
  1. boolean estVide(Liste l)
  2. {
  3. if (l=NULL) return vrai;
  4. else return faux;
  5. }



 
Si j'analyse bien ton idée, tu devrais plutôt écrire "if (l == NULL)" [:aloy]


Message édité par Sve@r le 13-12-2005 à 14:20:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-12-2005 à 14:19:38    

Nan , je ne comprend pas pourquoi j'ai toujour l'erreur "Segmentation fault".
J'ai fait comme il fallait faire enfin je pense

Reply

Marsh Posté le 13-12-2005 à 14:21:43    

rabzouze a écrit :

Nan , je ne comprend pas pourquoi j'ai toujour l'erreur "Segmentation fault".
J'ai fait comme il fallait faire enfin je pense


 
Erreur de débutant ! Ecrire "if (a=b)"  au lieu de "if (a == b)" !!!
Ta fonction "estVide()" met à null tous les pointeurs qu'elle reçoit !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-12-2005 à 14:32:42    

chrisbk a écrit :

bin la, dans le code, tu vois pas ?


Bon, oui, effectivement, y a déjà au moins une erreur [:ocube]
Mais avec un p'tit débug ça pourrait déjà mieux m'avancer [:itm]

Reply

Marsh Posté le 13-12-2005 à 14:37:16    

Merci les gars c'etait bien cela l'erreur toiut va bien maintenant. Merci encore

Reply

Marsh Posté le 13-12-2005 à 14:42:17    

Je suis une fille.

Reply

Marsh Posté le 13-12-2005 à 14:52:19    

moi aussi, mais mieux.

Reply

Marsh Posté le 13-12-2005 à 14:52:19   

Reply

Marsh Posté le 13-12-2005 à 14:52:49    

dsl Ben merci Mademoiselle.
Mais j'ai un autre soucis est ce que je dois faire ceci:
 
 q->morse=malloc(strlen(m));  
 
ou bien ceci
 
 q->morse=malloc(strlen(m)+1);
pour '\0'

Reply

Marsh Posté le 13-12-2005 à 15:00:35    

Il faut te donner la réponse sur quel forum ? ici ou sur DVP ???

Reply

Marsh Posté le 13-12-2005 à 15:06:15    

Ca ira tu ma bien aidé j t'en remercie beaucoup

Reply

Marsh Posté le 13-12-2005 à 15:18:00    

rabzouze a écrit :

Mais j'ai un autre soucis est ce que je dois faire ceci:
 
 q->morse=malloc(strlen(m));  
 
ou bien ceci
 
 q->morse=malloc(strlen(m)+1);
pour '\0'


 
malloc alloue la mémoire que tu lui demandes et rien d'autre. On n'appelle pas malloc que pour des chaînes donc il n'y a aucune raison que malloc alloue un octet de plus que demandé.
 
Tu sais que tu dois gérer "n" caractères plus un '\0' pour marquer la fin de la chaîne... à toi de faire ce qu'il faut pour avoir suffisemment de mémoire...

Reply

Marsh Posté le 13-12-2005 à 22:39:09    

rabzouze a écrit :

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:


Compile pas...

Code :
  1. Compiling: main.c
  2. main.c:11: error: syntax error before "estVide"
  3. main.c:12: warning: return type defaults to `int'
  4. main.c:12: warning: no previous prototype for 'estVide'
  5. main.c: In function `estVide':
  6. main.c:13: error: `NULL' undeclared (first use in this function)
  7. main.c:13: error: (Each undeclared identifier is reported only once
  8. main.c:13: error: for each function it appears in.)
  9. main.c:13: error: `vrai' undeclared (first use in this function)
  10. main.c:14: error: `faux' undeclared (first use in this function)
  11. main.c: At top level:
  12. main.c:18: warning: no previous prototype for 'Ajouter_en_Fin'
  13. main.c: In function `Ajouter_en_Fin':
  14. main.c:19: error: `NULL' undeclared (first use in this function)
  15. main.c:22: error: `vrai' undeclared (first use in this function)
  16. main.c:24: error: implicit declaration of function `malloc'
  17. main.c:24: warning: nested extern declaration of `malloc'
  18. <internal>:0: warning: redundant redeclaration of 'malloc'
  19. main.c:26: error: implicit declaration of function `strlen'
  20. main.c:26: warning: nested extern declaration of `strlen'
  21. <internal>:0: warning: redundant redeclaration of 'strlen'
  22. main.c:27: error: implicit declaration of function `strcpy'
  23. main.c:27: warning: nested extern declaration of `strcpy'
  24. <internal>:0: warning: redundant redeclaration of 'strcpy'
  25. main.c:36: warning: nested extern declaration of `malloc'
  26. <internal>:0: warning: redundant redeclaration of 'malloc'
  27. main.c:38: warning: nested extern declaration of `strlen'
  28. <internal>:0: warning: redundant redeclaration of 'strlen'
  29. main.c:39: warning: nested extern declaration of `strcpy'
  30. <internal>:0: warning: redundant redeclaration of 'strcpy'
  31. main.c: At top level:
  32. main.c:47: warning: no previous prototype for 'Afficher_liste'
  33. main.c: In function `Afficher_liste':
  34. main.c:48: error: `NULL' undeclared (first use in this function)
  35. main.c:50: error: implicit declaration of function `printf'
  36. main.c:50: warning: nested extern declaration of `printf'
  37. <internal>:0: warning: redundant redeclaration of 'printf'
  38. main.c: At top level:
  39. main.c:56: warning: return type defaults to `int'
  40. main.c: In function `main_':
  41. main.c:57: error: `FILE' undeclared (first use in this function)
  42. main.c:57: error: `fp' undeclared (first use in this function)
  43. main.c:66: error: `NULL' undeclared (first use in this function)
  44. main.c:69: error: implicit declaration of function `fopen'
  45. main.c:69: warning: nested extern declaration of `fopen'
  46. main.c:69: error: `FICHIER' undeclared (first use in this function)
  47. main.c:70: warning: nested extern declaration of `printf'
  48. <internal>:0: warning: redundant redeclaration of 'printf'
  49. main.c:74: error: implicit declaration of function `fscanf'
  50. main.c:74: warning: nested extern declaration of `fscanf'
  51. <internal>:0: warning: redundant redeclaration of 'fscanf'
  52. main.c:75: error: `EOF' undeclared (first use in this function)
  53. main.c:77: warning: nested extern declaration of `strlen'
  54. <internal>:0: warning: redundant redeclaration of 'strlen'
  55. main.c:78: warning: nested extern declaration of `malloc'
  56. <internal>:0: warning: redundant redeclaration of 'malloc'
  57. main.c:79: warning: nested extern declaration of `strcpy'
  58. <internal>:0: warning: redundant redeclaration of 'strcpy'
  59. main.c:82: warning: passing arg 1 of `Ajouter_en_Fin' with different width due to prototype
  60. main.c:87: error: implicit declaration of function `fclose'
  61. main.c:87: warning: nested extern declaration of `fclose'
  62. Process terminated with status 1 (0 minutes, 0 seconds)
  63. 21 errors, 20 warnings



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

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