Bonjour, j'ai fini un gros programme pour mon projet mais voilà j'ai une erreur qui me semble au dessus de mes capacité:

Voici la fonction qui plante:
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
 
void Incr_client_nbcouvert( Stat_nb_couvert *tabclient,char* fichier){
    FILE *fdate;
 
    Date sdate;
    printf("dae");
    printf("|%s|",fichier);
    printf("gore");
 
    fdate = fopen(fichier,"r");
    printf("bea");
    while(fread(&sdate,lenDate,1,fdate)){   //la fonction plante ici
            printf("g");
            printf("poscl=%d ",sdate.posfclient);
            tabclient[sdate.posfclient].nb_couvert=tabclient[sdate.posfclient].nb_couvert+sdate.nbpersonne;
            printf("posfcl = %d , nbcouvert = %d\n",sdate.posfclient,sdate.nbpersonne);
            tabclient[sdate.posfclient].posfclient = sdate.posfclient;  
    }
    fclose(fdate);
 
    printf("dac");
}
Or cette fonction est appelé par une autre fonction qui utilise ceci:
Elle lit tous les fichiers contenu dans le répertoire ou est le .c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void Affiche_toutes_reservation(){
    struct dirent *lecture;
    DIR *rep;
    rep = opendir("." );
    char nomdate[12]="         ";
    int i;
    while ((lecture = readdir(rep))) {
        ... //ici lecture->d_name contient tour à tour le nom de tout les fichier dans le répertoire du main .c 
    }
    closedir(rep);
}
Ce code fonctionne très bien pour faire l'affichage de toute les données de tout les fichiers qui sont dans le repertoire du .c .

Si j'appelle la fonction qui plante directement du main, ca fonctionne.

De plus ce qui pour moi me dépasse:
Si dans la fonction qui plante je fais un fopen en plus (d'un autre fichier) ca plante plus haut, au second fopen.
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
void Incr_client_nbcouvert( Stat_nb_couvert *tabclient,char* fichier){
    FILE *fdate;
 
    Date sdate;
    Client client;
    FILE* fclient;
    fclient=fopen("Client.bin","r");
    printf("dae");
    if (fclient == NULL){
        printf("Le fichier client n'existe plus.\n");
        exit(-1) ;
    }
    printf("|%s|",fichier);
    printf("gore");
 
    fdate = fopen(fichier,"r");   //ca plante ici
    printf("bea");
    while(fread(&sdate,lenDate,1,fdate)){
            printf("g");
            printf("poscl=%d ",sdate.posfclient);
            tabclient[sdate.posfclient].nb_couvert=tabclient[sdate.posfclient].nb_couvert+sdate.nbpersonne;
            printf("posfcl = %d , nbcouvert = %d\n",sdate.posfclient,sdate.nbpersonne);
            tabclient[sdate.posfclient].posfclient = sdate.posfclient;  
    }
    fclose(fdate);
 
    printf("dac");
}
Ce problème doit surement venir des fichier, trop d'ouvert ou un truc comme ca... Bref je pige pas. Auriez vous une fonction qui ferme tout les fichiers qui sont ouverts?

Je craque un peu car j'ai écris plus de 300 ligne de code dans la journée mais je cale sur les 10 dernières...