seg fault avant la 1ere ligne du main !!?? - C - Programmation
Marsh Posté le 25-11-2004 à 01:22:57
euh, je suppose que quand le debugger m'indique une erreur dans strlen, je suppose obligatoirement que c'est un problème par rapport à ce que je lui passe en paramètre?
pourtant :
strlen(stack->doss);
avec
typedef struct s_stack
{
char * doss;
struct s_stack *next;
} t_stack
et
t_stack *stack;
Marsh Posté le 25-11-2004 à 01:35:28
Tu n'aurais pas bouffer le caractère nul dans la chaine que tu lui passe en paramètre?
strlen va parcourir toute la zone mémoire à la recherche d'un 0, en déborder -> SIGSEGV
Utilise strnlen
Marsh Posté le 25-11-2004 à 01:52:08
merci pour ton aide
en fait j'ai fait un malloc pour mon char * doss en prenant bien strlen de ma chaine de caractère + 1 (pour le \0)
je pense pas que ça vienne de là finalement...
maintenant il me parle d'une erreur sur strcpy (!) donc je regarde ça...
pffff, quelle idée de partir en école d'info
Marsh Posté le 25-11-2004 à 02:00:20
bon, j'ai testé autre chose et il me trouve tjs une erreur :
Code :
|
et j'ai toujours une erreur sur ma ligne du strlen
ça peut pas etre un problème avec la forme de stack->doss ?
je comprend plus rien là
Marsh Posté le 25-11-2004 à 02:04:12
résolu!
j'ai rajouter un
Code :
|
l'erreur était gérée differement avant mais comme ça marche, enfin, maintenant il me trouve d'autres erreurs
Marsh Posté le 25-11-2004 à 09:04:29
ACYT > si ton code n'est pas trop gros tu peux toujours le poster.
Marsh Posté le 25-11-2004 à 13:13:23
je pense effectivement que le plus simple pour que vous puissiez comprendre serait de poster le code mais je suis sûr que vous allez trouver plein plein de chose pas bien dedans
il fait environ 110 lignes, c'est trop?
Marsh Posté le 25-11-2004 à 13:53:54
bon ben, voilà le code : (je suis ouvert à toute critique qui me permettrait de mieux coder!!)
désolé je n'ai pas encore commenté le code par contre
Code :
|
il y a quelques printf par ci par là qui m'ont permis de localiser l'erreur...
Marsh Posté le 25-11-2004 à 14:12:27
ok problème résolu
j'avais juste oublié de récupérer stack à la ligne 83
me reste plus qu'à afficher le résultat dans le bon ordre
Marsh Posté le 25-11-2004 à 14:24:03
euh.... oui?
après reflexion c'est sûr qu'elle sert à rien mais en fait au début j'étais parti sur une liste chaînée et j'initialisais beaucoup plus de chose dans cette fonction...
par contre je dois vraiment avoir fait une pile de merde pour qu'elle arrive à me ressortir les valeurs dans le mauvais sens
Marsh Posté le 25-11-2004 à 14:35:43
un doute me prend : pourquoi si je rajoute un printf("/%s", s_dir->d_name);
avant la ligne 89, il m'affiche directement le resultat sans passer par ma pile??
j'ai fait tout ça pour rien??
Marsh Posté le 25-11-2004 à 14:37:14
ACYT a écrit : j'ai fait tout ça pour rien?? |
Tu veux dire que tu aurais pu utiliser getcwd ?
http://man.he.net/man3/getcwd
edit: en plus, je crois que ton truc ne marche pas si le nom d'un de tes répertoires commence par un '.'
Marsh Posté le 25-11-2004 à 14:48:53
bon ben voilà, je viens de supprimer ma pile et tout fonctionne avec juste un petit printf bien placé
j'ai la rage, j'ai bossé jusqu'à 3h30 pour ça ce matin
voilà le code final :
edit : en fait je le remettrai quand le projet sera rendu, pas envie que des petits malins le pompe entre temps
en tout cas merci à tous pour votre aide!
Marsh Posté le 02-12-2004 à 23:30:27
ACYT a écrit : bon ben, voilà le code : |
Voici une version simplifiée et corrigée:
Code :
|
Marsh Posté le 25-11-2004 à 00:43:07
voilà, je suis entrain de recoder la commande Unix "pwd" en C, avec des opendir, des readdir et une petite pile FILO maison, et, comme je débute en C, je ne comprend pas trop pourquoi j'ai un seg fault au lancement du prog, alors que je n'ai aucune erreur à la compile.
j'ai mis un printf à la premiere ligne de mon main et il ne me l'affiche pas.
est ce qu'il parcourt les autres fonctions avant mon main et qu'il seg fault à cause d'une d'entre elles?
comment savoir où se situe le problème?