Segment default inconnue
Résolu
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 -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Pour des raisons de tests j'ai écrit se bout de code qui me permet de parcourir toute l'arborescence de mes répertoires, sauf qu'au bout d'une centaine de seconde apparais the segment défaut, peut-être que je suis aveugle mais je ne vois pas ou et le problème alors pour être sûr même-ci cela n'est pas la bonne démarche à faire, j'ai re-compilé ma source pour du BSD et là il me semble fonctionné même "gdb" & "valgrind" me cause que tout vas bien , j'ai dû louper un truc où c'est ma machine qui me joue des tour ?
Merci d'avance aux experts
Pour des raisons de tests j'ai écrit se bout de code qui me permet de parcourir toute l'arborescence de mes répertoires, sauf qu'au bout d'une centaine de seconde apparais the segment défaut, peut-être que je suis aveugle mais je ne vois pas ou et le problème alors pour être sûr même-ci cela n'est pas la bonne démarche à faire, j'ai re-compilé ma source pour du BSD et là il me semble fonctionné même "gdb" & "valgrind" me cause que tout vas bien , j'ai dû louper un truc où c'est ma machine qui me joue des tour ?
Merci d'avance aux experts
#include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <dirent.h> #include <sys/stat.h> /** * Fonction Liste les répertoires,sous répertoire && Affiche le contenu **/ void f_Lister(char *nDir){ DIR *pRep = NULL; struct stat st_Stat; struct dirent *pDir = NULL; if( (pRep = opendir(nDir))== NULL){ perror("Impossible d'ouvrir le repertoire\n"); return; } chdir(nDir); while( (pDir = readdir(pRep))!= NULL){ /* pour les repertoire caché */ if((strcmp(pDir->d_name,".")==0)||(strcmp(pDir->d_name,"..")==0)) continue; /* Acquisition des informations */ lstat(pDir->d_name,&st_Stat); if(S_ISDIR(st_Stat.st_mode)){ printf("Repertoire[%s]\n",pDir->d_name); f_Lister(pDir->d_name); } else printf("\t|_-> %s\n",pDir->d_name); } chdir(".."); closedir(pRep); } /** * Fonction principale **/ int main(void){ /* Appel de la fonction F_Lister */ f_Lister("/"); return (EXIT_SUCCESS); }
A voir également:
- Segment default inconnue
- Appeler en inconnue - Guide
- Default boot device missing or boot failed - Forum Matériel & Système
- Minecraft commande inconnue ou incomplete - Forum Jeux vidéo
- Free erreur video inconnue - Forum Box et Streaming vidéo
- %Localappdata%\google\chrome\user data\default ✓ - Forum Google Chrome
3 réponses
Salut,
Code testé OK
CC= gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
OS= Red Hat Centos 6 64bits
Dand GDB, tu as acces à la backtrace au moment du segfault ?
Code testé OK
CC= gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
OS= Red Hat Centos 6 64bits
Dand GDB, tu as acces à la backtrace au moment du segfault ?
Bonjour,
Merci de m'avoir répondu,
alors j'ai fait toute les manip de gdb même
à bientôt
Merci de m'avoir répondu,
alors j'ai fait toute les manip de gdb même
gcc -g parcourd.c -Wall -o Listerrien à faire, cette fois-ci il plante directement au début de l'excution du programme "main" alors je n'ai pas cherché bien longtemps j'ai désassemblé et suivi son épate ligne par ligne résultat j'obtiens ceci et il me semble qu'il ne trouve pas un truc ou une instruction dans "getdents.c" en gros une des fonction de l'en-tête dirent pour les dossier bref puis il fait un sauf très bizarre pour le "main" ? alors franchement je suis largé sois j'ai fait une connerie dans mon code ou sur ma machine à vouloir expérimenter des choses pas très nettes ou peut être ma lib posix à pris un sacré coup
file="../sysdeps/unix/sysv/linux/getdents.c"line="105"/> 07ffff7ad6311 <__getdents+33>: mov %rax,%r13 07ffff7ad6361 <__getdents+113>: mov 0x2fcab8(%rip),%rdx #0x7ffff7dd2e20 07ffff7ad6368 <__getdents+120>: neg %eax 07ffff7ad636a <__getdents+122>: or $0xffffffffffffffff,%r13 07ffff7ad636e <__getdents+126>: mov %eax,%fs:(%rdx) 07ffff7ad6371 <__getdents+129>: jmp $0x400982, %edi
à bientôt
Salut,
Ok, Je dois avouer que je n'ai pas trop d'idées (je n'ai jamais rencontré le pb...)
Cela dit, si tu fais les manips suivantes tu vois quelque chose d'anormale ?
- Modification du répertoire à parser en mettant une arbo plus petite (ex ton /home)
- ldd sur le binaire
- Compilation simple et sans le mode debug: gcc parcourd.c -o Lister
- Lancement de ton binaire avec strace (Avec rep plus petit que /) : strace ./Lister
"ou sur ma machine à vouloir expérimenter des choses pas très nettes"
Tu peux developper ? tu as trop joué les apprentis sorciers ?
Ok, Je dois avouer que je n'ai pas trop d'idées (je n'ai jamais rencontré le pb...)
Cela dit, si tu fais les manips suivantes tu vois quelque chose d'anormale ?
- Modification du répertoire à parser en mettant une arbo plus petite (ex ton /home)
- ldd sur le binaire
- Compilation simple et sans le mode debug: gcc parcourd.c -o Lister
- Lancement de ton binaire avec strace (Avec rep plus petit que /) : strace ./Lister
"ou sur ma machine à vouloir expérimenter des choses pas très nettes"
Tu peux developper ? tu as trop joué les apprentis sorciers ?