Probleme de pointeur

Probleme de pointeur - C - Programmation

Marsh Posté le 16-12-2005 à 16:58:30    

J'essai d'ajouter dans ma liste un élément voila l'erreur que j'obtiens

Citation :

Segmentation fault


 
Appel de la fonction

Code :
  1. char aj;
  2. char *codeLa;
  3. printf("Veuillez saisir la lettre pour ajouter: " );
  4. scanf(" %c",&aj);
  5. printf("Veuillez saisir le code pour ajouter: " );
  6. scanf(" %s",codeLa);
  7. int ke;
  8.  ke=strlen(codeLa)+1;
  9.         char* cccode=(char*) malloc(sizeof(char)*ke);
  10.          strcpy(cccode, codeLa);
  11. Ajouter_en_Fin(aj,cccode,&l);


 
 
Déclarration de la fonction

Code :
  1. void Ajouter_en_Fin(char c,char *m,Liste *l)
  2. {
  3. Liste p=NULL;
  4. Liste q=NULL;
  5. if (estVide(*l)==vrai)
  6. {
  7.  p= (Liste) malloc(sizeof(Element));
  8.  p->c=c;
  9.  p->morse=malloc(strlen(m)+1);
  10.  strcpy(p->morse,m);
  11.  p->suiv=NULL;
  12.  *l=p;
  13. }
  14. else
  15. {
  16.  p=Precedent(c,*l);
  17.  q= (Liste) malloc(sizeof(Element));
  18.  q->c=c;
  19.  q->morse=malloc(strlen(m)+1);
  20.  strcpy(q->morse,m);
  21.  q->suiv=p->suiv;
  22.  p->suiv=q;
  23. }
  24. }

Reply

Marsh Posté le 16-12-2005 à 16:58:30   

Reply

Marsh Posté le 16-12-2005 à 17:07:42    

Je n'ai pas regardé le reste, mais :
 

char *codeLa;
...
scanf(" %s",codeLa);


 
 
*codeLa n'a aucun espace de défini. Comme tu ne lui as affecté aucune valeur, il pointe potentiellement n'importe où en mémoire. Ton scanf() va donc tenter d'insérer n'importe où en mémoire.
Donc, segfault.
 
 
J'ajouterais que tu devrais utiliser fgetc() et fgets() à la place de tes scanf().

Reply

Marsh Posté le 16-12-2005 à 17:25:22    

Mais one ne peut pas le resoudre avec scanf. C'est faisable je pense

Reply

Marsh Posté le 16-12-2005 à 17:31:30    

Rien compris à ta phrase : résoudre quoi ?

Reply

Marsh Posté le 16-12-2005 à 17:34:13    

si tu peux garder ton scanf... mais ce qu'essayait de te dire Elmoricq c'est que tu dois faire un malloc sur ton pointeur CodeLa ;)
d'ailleurs tu voudrais faire un code vraiment propre, tu devrais initialiser tes variables à 0 et tes pointeurs à NULL

Reply

Sujets relatifs:

Leave a Replay

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