[Split] [Erreur de segmentation] [C] [Programmation] [Résolu/Fermé]

Signaler
-
Messages postés
6
Date d'inscription
lundi 9 mai 2016
Statut
Membre
Dernière intervention
13 mai 2016
-
Bonjour,
Je fais un programme qui me récupère des données d'un fichier .csv, et je split chaque ligne pour mettre ces données dans une structure de données. Quand j’exécute le programme ça fonctionne jusqu'à une certaines lignes de mon csv, et ça affiche : "Erreur de segmentation (core dumped)".

Quelqu'un aurait-il une idée ?
merci.

1 réponse

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 752
Bonjour,

Probablement une erreur dans ton code...

Cdlt,
Messages postés
6
Date d'inscription
lundi 9 mai 2016
Statut
Membre
Dernière intervention
13 mai 2016
>
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Je trouve aussi que c'est plus propre, mais j'ai toujours une erreur de segmentation ^^, après un 75éme affichage (qui correspond à la 75éme ligne du fichier).
Pour les free j'ai changé : genre j'en ai mit avant chaque u=incrémentation de i mais ça ne change rien. J'essaye en tout cas de voir d'où vient ce segfault.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 752
Il va falloir jouer avec le débugger :-).
S'il n'y a rien de confidentiel, le mieux serait de nous envoyer également ton fichier .CSV. Si tu souhaites restreindre l'accessibilité à ton fichier CSV, tu peux le chiffrer et m'envoyer en message privé la clé.
L'idée est que je puisse reproduire sur ma machine ton erreur. Je pourrais trouver ce qui cloche.
Messages postés
6
Date d'inscription
lundi 9 mai 2016
Statut
Membre
Dernière intervention
13 mai 2016
>
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Je vais voir de mon coté avec le débugger, je te passe le fichier en MP, il n'y a pas de confidentialité ^^ j'en suis pas encore là.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 752
Voici mes remarques sur ton code :
Dans ton main() :

liste l = creer();
l = importSouhait("souhaits_voyageurs.csv");

Autant faire : liste l = importSouhait("...");
Ca ira plus vite et évitera de se poser des questions sur la fonction creer().

Dans importeSouhait()
liste listeGenerale = creer();
Tu ne te sers pas de cette variable. Tu peux donc supprimer cette ligne.

Sinon, l'erreur est un buffer overflow dans importSouhait()
char mot[255];
Il y a une ligne qui fait 254 caractères + 1 retour chariot = 255.
De fait, le fgets() lira tout sauf le retour chariot. Et le fgets() suivant renverra un seul caractère '\n'. De fait, tout le reste va planter.
Il suffit de mettre : char mot[256]; A noter que tu peux mettre plus pour avoir une marge de sécurité.
Note : attention, fgets() renvoie '\n' lorsqu'il a la place. Si tu en as pas besoin, tu peux le supprimer via un un pointeur que tu initialises avec strchr(mot,'\n'); et s'il vaut non NULL, tu le fais pointer vers 0.
En tout cas, en mettant char mot[256], ça ne devrait plus planter.
Messages postés
6
Date d'inscription
lundi 9 mai 2016
Statut
Membre
Dernière intervention
13 mai 2016

Ah trop bien, ça marche !! J'ai apporté les modifs et c'est exactement ça ^^
Merci beaucoup.