probleme d'allocation dynamique de mémoire
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:
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:
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 :-)