erreur de segmentation [c] - C - Programmation
Marsh Posté le 02-12-2009 à 20:09:37
Salut
ton pointeur dico n'est pas initialisé donc dico[findico] plante. Il te manque un
dico = malloc ( longueur * sizeof(char**));
Et puis tu devrais faire ta vérification du pointeur avant de l'utiliser
Code :
|
Je ne suis pas sûr non plus que feof soit la bonne solution pour tester la fin du fichier, mieux vaudrait regarder le retour de fscanf (voire utiliser fgets). (Il faudrait que quelqu'un confirme pour feof)
Marsh Posté le 11-12-2009 à 19:04:25
Bonjour,
Suite à tes remarques j'ai pu régler (je pense) les erreurs de segmentation par contre maintenant j'ai un autre soucis c'est que mon tableau dico[] ne contient pas vraiment les mots du texte mais après un test avec un printf il contient plutôt des choses de ce style : 0+��j ou P+��j ... Inutile de dire que pour la comparaison avec les mots du texte c'est pas génial... Je remet le code:
Code :
|
Merci
PS: feof marche bien pas de soucis de ce côté la
Marsh Posté le 12-12-2009 à 11:50:50
Le remplissage du tableau dico semble bon, le problème viendrai plutôt du qsort, quelqu'un à une idée ?
Marsh Posté le 12-12-2009 à 14:58:29
Il faut donner la taille des éléments à échanger, donc c'est peut-être plutôt sizeof(char *) que LONGMOT. A tester bien entendu.
Marsh Posté le 13-12-2009 à 18:39:45
oui en effet c'est bien ça j'ai vu ça entre temps, merci à toi
Marsh Posté le 16-12-2009 à 00:12:27
Bon le programme fonctionne presque... je n'ai plus d'erreur de segmentation mais j'ai un problème au niveau de la fonction "ajout" (elle sert à ajouter un mot à la fin du fichier dico en passant par le tableau dico si le mot du texte n'est pas existant). Donc cette fonction marche de temps en temps...
Exemple:
Voila le contenu du fichier texte:
Celui du fichier dico:
Et voila ce qu'il se passe
Le programme plante... Dans certains cas, ça passe (c'est sûrement du mot au mot ou bien au nombre de mots) j'ai tout essayé mais je ne comprends pas je remet le code complet:
Code :
|
J'espere que quelqu'un pourra m'aider parce que la je vais pas tarder à péter un câble
Merci d'avance
Marsh Posté le 16-12-2009 à 01:37:52
Utilise un debugger et vérifie ta dichotomie
En vrac:
berk les variables globales.
inutile de créer ton tableau dynamiquement si c'est pour lui donner la taille d'un #define
dico[MAXMOTS][LONGMOT]
revient au même dans ce cas.
malloc => free (il en manque un je crois)
fscanf fgets
...
Marsh Posté le 16-12-2009 à 18:34:34
Tout d'abord merci de ton aide, pour te répondre:
-La fonction dichotomie marche je l'ai deja testée et le debugger ne me dit rien puisque le programme reste planté sans erreur..
-berk les variables globales je suis d'accord avec toi , c'était juste pour faire un test et je l'ai laissé en fait...
-Pour le tableau dynamique c'est vrai, au départ je voulais le faire mais je l'ai enlevé pour éviter les sources d'erreur
-Ah oui c'est vrai il manque un free, je l'ai mis mais ça ne résout pas le problème malheureusement...
Marsh Posté le 16-12-2009 à 20:08:28
moi j'ai passé un coup de debugger et arrivé au mot "est", la fonction dichotomie tourne en boucle infinie. Je n'ai pas cherché pourquoi.
Marsh Posté le 16-12-2009 à 20:44:51
oui c'est ce que je redoutais... en fait j'avais crée et testé cette fonction dichotomie avant le code complet et j'avais déja eu ce souci de boucle infinie mais j'avais rajouté cette ligne:
if (((j-i)%2)==0) k++;
Je croyais avoir résolu le problème puisque ça fonctionnait, apparement maintenant ça ne fonctionne plus
Marsh Posté le 16-12-2009 à 22:19:50
bon en fait j'ai trouvé il se trouve que contrairement aux apparences i+((j-i)/2) n'est pas équivalent à (i+j)/2...........et que je suis un gros boulet
Marsh Posté le 16-12-2009 à 23:31:38
jamsss a écrit : bon en fait j'ai trouvé il se trouve que contrairement aux apparences i+((j-i)/2) n'est pas équivalent à (i+j)/2 |
Vive les entiers...
jamsss a écrit : ...........et que je suis un gros boulet |
Rassure toi, c'est souvent sur les erreurs les plus stupides que l'on passe le plus de temps...
Marsh Posté le 02-12-2009 à 19:07:01
Bonjour,
j'ai écrit le code suivant en c il s'agit d'un correcteur orthographique:
Je compile avec gcc et il ne détecte aucune erreur, par contre l'exécution me donne une erreur de segmentation dès le lancement du programme. En utilisant gdb il me détecte une erreur sur cette ligne:
dico[findico]=malloc(LONGMOT*sizeof(char*));
Je ne vois pas le problème...
Merci d'avance pour votre aide
jamsss
Message édité par jamsss le 02-12-2009 à 20:58:52