comme diogene je pense qu'il y a un pb. avec la variable char *nom_maladie de la structure CONSULTATION. l'allocation mémoire dans la fonction lire_String n'alloue qu'un seul caractère.
Evidement ça plante quand on s'en sert et qu'on tape dans une zone mémoire qui n'est pas alloué au programme.
- Alors soit:
1 2 3 4 5 6
| #define _Max_Str_Len_ 256
char* lire_String(){
char * chaine_a_lire = calloc(1, _Max_Str_Len_);
scanf("%s",chaine_a_lire); // ou sncanf(...)
return chaine_a_lire;
} |
- Sinon dans la fonction new_consult () ajoute
chaine_a_lire = (char*)calloc(1, _Max_Str_Len_);
et ne plu le faire ailleur, mais remplacer par des strcpy.
- Ou déclare char nom_maladie[_Max_Str_Len_]; dans la structure...
C'est pas ce qu'il y a de mieux, mais pour un début c'est suffisant (et utilise des strcpy() ).
Je crois bien qu'il y a un Gros Bug dans ta gestion de liste consultation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| consultation* new_consult (){
consultation *tempo_consult = malloc (sizeof(consultation));
consultation *last;
int nb_consult = 1;
...
if (nb_consult == 1){ Toujour = 1 !
last = tempo_consult;
tempo_consult = NULL;
nb_consult++;
}
else if (nb_consult > 1){
tempo_consult->suivant = last; last n'est pas initialisé!
last = tempo_consult;
tempo_consult = NULL;
nb_consult++;
}
return last;
} |
Je crois que les variable last et nb_consult ne devrais pas être dans la fonction mais déclarées en global et initialisé une première fois (dans le main).
Tu es sur des tabulations ?
*%[ \t] devrais pouvoir remplacer les \t
Et je virerais par la même occasion le \n final, quitte à contrôler que neFiche->nom_maladie ne finis pas par un '\n', auquel cas on le remplace par '\x0'
Salut, et bon apprentissage.
Partager