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:
Passons les printf et le return qui servent juste de test, tous cela doit être supprimé une fois terminé.
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); }
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:
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.
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 ***
Pouvez-vous m'aider?
merci :-)
Partager