Salut à tous !!
Je dois faire un petit programme qui affiche les éléments d'un dossier en C (comme ls).
Le problème c'est que le premier répertoire s'affiche bien.
Mais après j'ai un
*** glibc detected *** tri: corrupted double-linked list: 0x0804c140 ***
Je pense qu'il y a un soucis au niveau de mon free()
Le voici : http://pastebin.com/m30d082ce
Merci de m'éclairer sur mon problème, car c'est embêtant de pas trouver où est l'erreur.
# C'est un exercice?
Posté par Christophe --- . Évalué à 3.
Sinon, un indice:
- tu as bien un problème de free, mais il ne plante pas le programme, donc ne pas s'en inquiter pour le moment;
- ton problème est dans le malloc, comme d'habitude.
Puis quelques remarques:
- un certain nombre de tes commentaires sont totalement inutiles, alors qu'il y aurait moyen d'y mettre une information;
- mais essayer de commenter c'est tout de même une bonne chose, essaie juste de réfléchir à ce que tu veux mettre. C'est dur au départ, mais si tu fait l'effort, tu y gagnera vite par la suite;
- très bon réflexe de mettre des commentaire devant chaque fonction, essaie de ne jamais perdre cette habitude;
- pourquoi une variable arguments et une autre tE ? entre un nom explicite qui est en fait faux, et un nom crypté, heu...
Voila, pardon pour mes remarques un peu complexes/dures, mais je suis parti du principe que tu voulais apprendre, donc j'essaie de te faire avancer plutôt que de pondre un résultat tout prêt qui au final ne t'aidera pas. Mais si tu veux juste un truc qui marche, dis-le.
[^] # Re: C'est un exercice?
Posté par BAud (site web personnel) . Évalué à 2.
le trouver est laissé à titre d'exercice :p
[^] # Re: C'est un exercice?
Posté par Animatrix . Évalué à 1.
Mais, ils n'utilisent des malloc que pour un char *file;
et un plus leur code est pas du tout commenté (lol !!)
[^] # Re: C'est un exercice?
Posté par Animatrix . Évalué à 1.
Alors, je crois simplement avoir fait un free(tE) et tout mon appli remarche !!
Par contre, j'aimerais savoir pourquoi tu penses qu'il y a un pb au niveau du malloc (j'en fait 2 à cause du readdir) ?
Sinon, mon programme a parfois un comportement étrange par exemple sur /usr/bin :
xfce4-screenshooter
Il y a des caractères spéciaux sur certains éléments, et je ne comprends pas pourquoi :( Serait-ce le malloc ?xfce4-session
xfce4-session-logout
xfce4-taskmanager
xfce4-tips
xfce4-volstatus-icon
Merci pour tes conseils/commentaires, je vais m'en occuper
[^] # Re: C'est un exercice?
Posté par Christophe --- . Évalué à 3.
Pour ton problème de caractères bizarres, je te confirmes aussi que c'est le même problème, ton changement sur le free a juste masqué l'un des symptomes.
Pour te donner un indice supplémentaire, je t'invites à regarder le man de strcpy, en particulier la remarque entre parenthèses dans le premier paragraphe.
[^] # Re: C'est un exercice?
Posté par Animatrix . Évalué à 1.
Il s'agit d'un malloc (strlen (repertoire->d_name)+1);
Je n'avais absolument pas pensé à ce problème.
Merci beaucoup, tu m'as fait gagner beaucoup de temps, car j'étais très loin de localiser le problème ici.
En effet, c'est avec l'expérience que l'on remarque cela.
[^] # Re: C'est un exercice?
Posté par Raphaël G. (site web personnel) . Évalué à 1.
malloc ((strlen (repertoire->d_name)+1) * sizeof(char));
Sinon je vois pas vraiment ce que tu alloues...
Enfin ça peut, peut-être marcher, mais si tu alloue une chaîne tu as intérêt a prendre en compte la taille du type de base...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.