Bonsoir tous,

Je fais (sous linux) une fonction qui permet de rechercher une chaine de caractère passé en paramètre dans un fichier texte.

Voici cette fonction:

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
 
 
char *date_search;
char *date_search=malloc(sizeof(char));
...
 
   date_search="Mar 11 07:31:18";
   Ulog_Search(date_search);
   date_search="Mar 12 09:56:18";
   DatePosition = Ulog_Search(date_search);
...
 
int Ulog_Search(char *stringSearch)
{
 
 int position, lenght_str, c, j;
 char v, *res;
 
 position=ftell(file_ulog);
 
 printf("Position: %d\n", position);
 
 res=malloc(sizeof(char));
 
 //On recupere la longueur de la chaine
 lenght_str=strlen(stringSearch);
 
 printf("Chaine rechercher: %s, longeur: %d\n", stringSearch, lenght_str);
 
 while(( c=fgetc(file_ulog)) != EOF && strcmp(res, stringSearch) != 0)
 {
 
   fseek(file_ulog, -1, SEEK_CUR);
 
   for(j=0; j<lenght_str; j++)
   {
     fscanf(file_ulog,"%c",&v);
 
     if(stringSearch[j] == v)
     {
       res[j]=v; 
     }
 
   }
 }
 
 printf("\nres: %s", res);
 printf("\nStringSearch: %s\n", stringSearch); 
 
 printf("Position dans le fichier: %d\n", ftell(file_ulog));
 
 free(res);
 res=NULL;
 
 return ftell(file_ulog);
 
}
Passons les printf et le return qui servent juste de test, tous cela doit être supprimé une fois terminé.

Mon problème vient du res=malloc(sizeof(char)); et du free(res) a la fin de cette fonction.

Lors du premier appelle a la fonction tous se passe bien
Mais à la seconde ca plante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Chaine rechercher: Mar 11 07:31:18, longeur: 15
 
res: Mar 11 07:31:18
StringSearch: Mar 11 07:31:18
Position dans le fichier: 16
*** glibc detected *** free(): invalid next size (fast): 0x0804b650 ***
Je suppose que c'est le free qui ne va pas, la désallocation ou la réallocation mémoire doit merdouiller. J'avoue avoir un peu du mal avec ces fonctions.

Pouvez-vous m'aider?

merci :-)