Erreur de segmentation: Lecture d'un fichier binaire (fonction fread)
Bonjour/Bonsoir à tous et à toutes,
si je viens ici c'est pour que vous puissiez éclairer ma lanterne ! Cela fait un peu plus de 4h maintenant que je planche sur le problème et je ne sais plus ou aller pour pouvoir terminer ce projet à bien ! (c'est un projet de gestion de bibliothèque en C)
Je dois lire un fichier binaire (avec la fonction fread) dont voici le bout de code ci dessous
Code:
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
| int charger_livres(livre_t* livres)
{
int nb_livres=0;
flivre = fopen("fichierLivre", "ab+");
if((flivre = NULL))
{
printf("Le fichier n'a pas pu être ouvert");
}
rewind(flivre);
while(fread(livres, sizeof(livre_t), MAX_LIVRES, flivre) != 0) {
nb_livres= fread(livres, sizeof(livre_t), MAX_LIVRES, flivre);
}
return nb_livres;
}
int charger_adherents(adherent_t* adherents)
{
int nb_adhr=0;
fadhr = fopen("fichierAdh", "ab+");
if((fadhr = NULL))
{
printf("Le fichier n'a pas pu être ouvert");
}
rewind(fadhr);
while(fread(adherents, sizeof(adherent_t), MAX_ADHR, fadhr) != 0) {
nb_adhr= fread(adherents, sizeof(adherent_t), MAX_ADHR, fadhr);
}
return nb_adhr;
} |
adherent_t et livres_t sont des structures définies dans mon header dont voici une partie
Code:
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
| #ifndef PRINCIPAL_H
#define PRINCIPAL_H
#define STR_MAX 50
#define MAX_ADHR 100
#define MAX_LIVRES 100
typedef struct {
int adr_cp;
char adr_ville[STR_MAX];
char adr_rue[STR_MAX];
} adresse_t;
typedef struct {
int adh_num;
char adh_nom[STR_MAX];
adresse_t adh_adresse;
int adh_nb_emprunts;
} adherent_t;
typedef struct {
int liv_num;
char liv_titre[STR_MAX];
struct {
char nom[STR_MAX];
char prenom[STR_MAX];
} liv_auteur;
int liv_emprunteur;
} livre_t;
FILE *fadhr;
FILE *flivre; |
Comme vous le voyez les FILE machin sont en globales, donc ils ne précèdent pas les fopen.
Cependant, lorsque je fais ceci, que je compile, aucune erreur, tout est cool.
Quand j’exécute, je tombe sur une erreur de segmentation... Et je n'arrive pas du tout à trouver pourquoi.
J'ai demander de l'aide auprès d'amis mieux qualifié que moi en ce domaine, ils ne savent pas non plus... (et même mon meilleur amis le plus fidèle: google...)
Je fais appel alors à votre intelligence et à votre expérience afin de soulever une armée pour vaincre ces erreurs de segmentation qui nous pourrissent la vie !
En vous remerciant par avance de votre aide,
Ascheritt, codeur en bouse.