Bonjour,

Je voudrais porter plainte contre le compilateur parce qu'il fait des coups en douce. Ah bien oui ! il ne manque pas de compiler, laisse la joie se mettre à son aise pour en fait m'insulter avec un crash comme je les aime xD.

Tout fonctionnait jusqu'à ce que je décide d'implémenter la fonction OCCURENCE_DANS_LIGNE. L'erreur doit je suppose donc venir de là bas !
Malgré les tests sur les pointeurs pour lesquels certains membres se sont vaillamment battu pour que je m'habitue à les mettre et bien j'ai quand même le droit au crash ! Puisqu'il ne m'affiche pas les erreurs du test else, j'en conclue qu'il rentre dans la boucle et qu'il plante dedans.

Étant donné que je fais mes premiers pas avec la fonction realloc, je suppose que l'erreur vient d'ici à cause d'une mauvaise manipulation mais laquelle ? That is the question à 100 francs !

Voici le beau code qui ne se déroule pas correctement :

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
 
int         LIGNE_FICHIER( FILE *FICHIER                                                   );
int        TAILLE_FICHIER( FILE *FICHIER                                                   );
int     OCCURENCE_FICHIER( FILE *FICHIER, char CARACTERE                                   );
void    MEMORISER_FICHIER( FILE *FICHIER, char *CHAINE                                     );
void OCCURENCE_DANS_LIGNE( FILE *FICHIER, int **TAB_OCCURENCE, int *TAILLE, char CARACTERE );
 
int main()
{
    // OBTENIR LE NOMBRE DE LIGNES
    FILE *F0=fopen("prenoms.txt","r");
    FILE *F1=fopen("noms.txt"   ,"r");
    int ligne_nom    = LIGNE_FICHIER( F0 );
    int ligne_prenom = LIGNE_FICHIER( F1 );
    fclose(F1);
    fclose(F0);
 
    // OBTENIR LE NOMBRE DE CARACTERES
    fopen("prenoms.txt","r");
    fopen("noms.txt"   ,"r");
    int taille_nom    = TAILLE_FICHIER(F1);
    int taille_prenom = TAILLE_FICHIER(F0);
    fclose(F1);
    fclose(F0);
 
    // OCCURENCE D'UN CARACTERE
    fopen("prenoms.txt","r");
    fopen("noms.txt"   ,"r");
    int occurence_nom    = OCCURENCE_FICHIER(F1, '-');
    int occurence_prenom = OCCURENCE_FICHIER(F0, '-');
    fclose(F1);
    fclose(F0);
 
    // PLACER FICHIER EN MEMOIRE
    char *NOM    = malloc(   taille_nom*sizeof(char));
    char *PRENOM = malloc(taille_prenom*sizeof(char));
 
    fopen("prenoms.txt","r");
    fopen("noms.txt"   ,"r");
    MEMORISER_FICHIER( F0, PRENOM );
    MEMORISER_FICHIER( F1, NOM    );
    fclose(F1);
    fclose(F0);
 
    // OCCURENCE DANS LIGNE
    int *TAILLE_TAB_NOM       = malloc(sizeof(int));
    int *TAILLE_TAB_PRENOM    = malloc(sizeof(int));
    int *TAB_OCCURENCE_NOM    = NULL;
    int *TAB_OCCURENCE_PRENOM = NULL;
 
    fopen("prenoms.txt","r");
    fopen("noms.txt"   ,"r");
    OCCURENCE_DANS_LIGNE( F0, &TAB_OCCURENCE_PRENOM, TAILLE_TAB_PRENOM, '-' );
    OCCURENCE_DANS_LIGNE( F1, &TAB_OCCURENCE_NOM   , TAILLE_TAB_NOM   , '-' );
    fclose(F1);
    fclose(F0);
 
    printf("NOMS : %d TAILLE : %d OCCURENCE : %d \nPRENOMS :%d TAILLE : %d OCCURENCE : %d",ligne_nom, taille_nom, occurence_nom, ligne_prenom, taille_prenom, occurence_prenom);
    getchar();
 
}
 
int LIGNE_FICHIER( FILE *FICHIER )
{
    int  NOMBRE_LIGNES = 0;
    char C                ;
 
    if( FICHIER != NULL )
      {
               while( fscanf(FICHIER,"%c",&C) != EOF )
                    {
                        if (  C == '\n' )
                           {
                               NOMBRE_LIGNES++;
                           }                    
                    }
 
               return NOMBRE_LIGNES;
      }
 
  else printf("\n ERREUR DANS LA FONCTION LIGNE_FICHIER\n   + VERIFIEZ QUE LE FICHIER EXISTE");
}
 
int TAILLE_FICHIER( FILE *FICHIER )
{
    int  TAILLE = 0;
    char C                ;
 
    if( FICHIER != NULL )
      {
               while( fscanf(FICHIER,"%c",&C) != EOF )
                    {
                               TAILLE++;                   
                    }
 
               return TAILLE;
      }
 
  else printf("\n ERREUR DANS LA FONCTION TAILLE_FICHIER\n   + VERIFIEZ QUE LE FICHIER EXISTE");
}
 
int OCCURENCE_FICHIER( FILE *FICHIER, char CARACTERE )
{
    int  OCCURENCES = 0;
    char C            ;
 
    if( FICHIER != NULL )
      {
               while( fscanf(FICHIER,"%c",&C) != EOF )
                    {
                        if (  C == CARACTERE )
                           {
                               OCCURENCES++;
                           }                    
                    }
 
               return OCCURENCES;
      }
 
  else printf("\n ERREUR DANS LA FONCTION LIGNE_FICHIER\n   + VERIFIEZ QUE LE FICHIER EXISTE");
}
 
void MEMORISER_FICHIER( FILE *FICHIER, char *CHAINE )
{
    if( FICHIER != NULL && CHAINE != NULL )
      {
               int  i = 0;
               char C    ;
 
               while( fscanf(FICHIER,"%c",&C) != EOF )
                    {
                        CHAINE[i]=C;
                        i++;               
                    }
      }
 
  else printf("\n ERREUR DANS LA FONCTION MEMORISER_FICHIER\n   + VERIFIEZ QUE LE FICHIER EXISTE\n   +VERIFIEZ QUE LA CHAINE EST CORRECTEMENT REFERENCEE");
}
 
void OCCURENCE_DANS_LIGNE( FILE *FICHIER, int **TAB_OCCURENCE, int *TAILLE, char CARACTERE )
{
    char  C                ;
    int   i             = 0;
    int   CONTROL       = 0;
    int   LIGNE         = 0;
    int   OCCURENCES    = 0;
 
    *TAILLE        = 1                              ;
    *TAB_OCCURENCE = malloc( (*TAILLE)*sizeof(int) );
 
    if( FICHIER != NULL && TAB_OCCURENCE !=NULL && TAILLE != NULL )
      {
               while( fscanf(FICHIER,"%c",&C) != EOF )
                    {
                        if ( C == '\n' )
                           {
                               LIGNE++;
                           }
 
                        if ( C == CARACTERE )
                           {
                               if ( CONTROL == 0 )
                                  {
                                      *TAB_OCCURENCE[i]=LIGNE;
                                      i++;  
                                      CONTROL++;        
                                  }
 
                             else {
                                      realloc(*TAB_OCCURENCE, ((*TAILLE)++)*sizeof(int));
                                      *TAB_OCCURENCE[i]=LIGNE;
                                      i++;
                                  }                 
                           }                    
                    }
      }
 
  else printf("\n ERREUR DANS LA FONCTION OCCURENCE_DANS_LIGNE\n   + VERIFIEZ QUE LE FICHIER EXISTE\n   + VERIFIEZ SI VOS POINTEURS SONT CORRECTEMENTS REFERENCES");
}