Tu initialises pas ton pointeur suivant correctement...
Déjà,
fread(&suivant->pers, sizeof(carnet), 1, pf);
devrait être
fread(&suivant->pers, sizeof(suivant->pers), 1, pf);
Le problème, c'est que tu ne mets pas systèmatiquement le pointeur à jour lorsque tu le lis ton fichier, une meilleure solution est de faire:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
liste lireficher()
{
liste car=NULL;
liste temp, suivant;
FILE *pf;
pf=fopen("carnet.dat", "r");
if(pf != NULL)
{
//On lit le premier élément, on suppose que le fichier a au moins un élément
car = (liste) malloc(sizeof(carnet));
//On test toujours après un malloc
if(car == NULL)
return NULL;
//C'est toujours mieux de tester le retour des fonctions...
if(fread(&car->pers, sizeof(car->pers), 1, pf) != sizeof(car->pers))
{
free(car);
return NULL;
}
car->suivant = NULL;
temp=car;
while(!feof(pf))
{
//A titre d'exercice, je laisse le test du malloc et le retour du fread... il faudra
//libérer la liste crée s'il y a un problème
suivant = (liste) malloc(sizeof(carnet));
//on récupére l'info sur la personne
fread(&suivant->pers, sizeof(suivant->pers), 1, pf);
//on met le pointeur à null
suivant->suivant = NULL;
//on fait le lien
temp->suivant = suivant;
temp = suivant;
}
}
fclose(pf);
return car;
} |
Jc
Partager