Bonjour à tous,

J'ai un problème avec un fichier

J'enregistre dans ce fichier des structures

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef struct
{ 
     int        OffSet;
     short      Longueur;
     char       Donnee[255];
} ELEMENT;
Ensuite je dois afficher le contenu du fichier en lisant 2 enregistrements à la fois. Mais lorsque j'essaye d'afficher, soit j'ai la même ligne qui s'affiche en boucle, soit j'ai un message d'erreur: "Segmentation Fault (core dumped)"

D'après ce que j'ai compris, ce serait un problème de pointeur mais je n'arrive pas à le résoudre.

Je tiens à préciser que je suis sur une machine virtuelle solaris, ce qui normalement ne change rien.

Voici ma fonction d'affichage:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
int Liste(FICHIER F)
{
    printf("Liste du fichier : %s\n------------------\n",F.NomFichier);
 
    int fin = 0;       // Variable qui me permet de voir si je suis en fin de fichier
    int ret = 1;      // Variable qui récupère la valeur de retour de fread
 
    FILE* fp;        // mon pointeur de fichier
    ELEMENT Elm; // ma structure
 
    rewind(fp);     // je replace le pointeur au début du fichier
 
    do
    {
 
	fin = feof (fp);    // je vérifie que je ne suis pas à la fin de mon fichier
	if(fin != 0)
	{
		return 1;   // Si je suis à la fin, je quitte la fonction d'affichage
	}
        ret = fread(&Elm,sizeof(Elm),2,fp);   // Je lis 2 enregistrements de mon fichier
        printf("%d\t",Elm.OffSet);
        printf("%hd\t",Elm.Longueur);
        puts(Elm.Donnee);
        printf("\n");                                 // J'affiche
        printf("%d\t",Elm.OffSet);
        printf("%hd\t",Elm.Longueur);
        puts(Elm.Donnee);
        printf("\n");
        fin = feof (fp);                            // Je revérifie si je suis à la fin du fichier
    }while(fin == 0);                             // Si je ne suis pas à la fin, je boucle pour afficher les enregistrements suivant
 
return 0;
}
Merci pour vos réponses.