SIGABRT sur un fclose
Résolu
Dayan42
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je code un projet d'intelligence artificielle en C.
Dans une fonction, j'ouvre un fichier de mots considérés comme inutiles (pronoms, déterminants...) et je mets chaque mot dans un tableau de chaines. D'un moment à l'autre, mon programme ne marche plus : sigabrt lorsque je fais le fclose... je ne suis pas débutant et je ne vois pas d'où ca peut venir. Je sais que fopen fais des malloc et que fclose des free et qu'il y a des soucis la dedans car ca plante sur :
mais je ne vois pas ou.. voici le coeur de ma fonction :
je code un projet d'intelligence artificielle en C.
Dans une fonction, j'ouvre un fichier de mots considérés comme inutiles (pronoms, déterminants...) et je mets chaque mot dans un tableau de chaines. D'un moment à l'autre, mon programme ne marche plus : sigabrt lorsque je fais le fclose... je ne suis pas débutant et je ne vois pas d'où ca peut venir. Je sais que fopen fais des malloc et que fclose des free et qu'il y a des soucis la dedans car ca plante sur :
*** Error in `./jacek': free(): invalid next size (normal): 0x00000000024b9130 ***
mais je ne vois pas ou.. voici le coeur de ma fonction :
if(fichier != NULL){
i = 0;
while(fgets(buff,TAILLE_MOT,fichier) != NULL){
strcpy(tab_char[i] , buff);
i++;
}
fclose(fichier);
}else{
fprintf(stdout, "Erreur du chargement du fichier liste_useless.txt\n");
exit(EXIT_FAILURE);
}
2 réponses
Je sais que fopen fais des malloc et que fclose des free
Euh non... Ni l'un, ni l'autre.
Pourrais-tu montrer ton programme en entier ? Notamment la partie qui définie buff, fichier et tab_char.
Euh non... Ni l'un, ni l'autre.
Pourrais-tu montrer ton programme en entier ? Notamment la partie qui définie buff, fichier et tab_char.
Bonjour ( & hi @fiddy )
@Dayan42 Ton problème vient clairement de la fonction de délocalisation
Quant à "sigabrt" c'est une de tes fonctions ou bibliothèque qui y a fait appel grâce à la fonction abort().
à bientôt
@Dayan42 Ton problème vient clairement de la fonction de délocalisation
free( void *ptr )ton pointeur doit être corrompu plus précisément a cause d'un écrasement mémoire et je soupçonne ta variable d'incrémentation ' I' il se peut qu'elle soit la cause de ton erreur.
Quant à "sigabrt" c'est une de tes fonctions ou bibliothèque qui y a fait appel grâce à la fonction abort().
à bientôt
voici la fonction entiere donc :
je ne peux montrer le programme en entier, j'ai plus de 8 fichiers.c qui font 500 lignes.. mais comme j'ai dit c'est venu d'un moment à l'autre, le programme marchait tres bien cet apres midi
Il manque toujours la déclaration des variables demandées. Ce qu'il y a dans le prototype n'est pas suffisant.
Note :
fclose(fichier);
Je te conseille d'initialiser fichier à NULL; juste après. Ce n'est pas obligatoire, mais cela évite les mauvaises surprises.
while(fgets(buff,TAILLE_MOT,fichier) != NULL){
strcpy(tab_char[i] , buff);
i++;
}
Pourquoi ne pas écrire directement dans tab_char[i] ?