Bonjour,
je recode actuellement la commande ls -l de l'env UNIX.
Il ne me reste plus qu'à mettre les noms de fichier dans l'ordre.
Mon tri par insertion fonctionne mais ma fonction d'ajout dans ma liste chainée déconne ...
Voila les fonctions du .c qui déconnent apparemment (je post seulement ce qui peut fail) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 .. -> a.out -> main.c -> . -> my_ls.h.gch -> my_ls.c~ -> sort_names.c~ -> sort_names.c -> parse_time.c -> my_ls.c -> my_ls.h -> my_ls.h~ -> Pk�b� -> Fin de liste *** glibc detected *** ./a.out: double free or corruption (out): 0x0000000000400590 *** ======= Backtrace: ========= /lib64/libc.so.6[0x3a19e76d63] /lib64/libc.so.6(closedir+0xd)[0x3a19ea659d] ./a.out[0x4009df] ./a.out[0x40067d] /lib64/libc.so.6(__libc_start_main+0xfd)[0x3a19e1ee5d] ./a.out[0x4005b9] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 08:05 1312109 /home/maingu_t/localc/FileSystem/my_ls/a.out 00601000-00602000 rw-p 00001000 08:05 1312109 /home/maingu_t/localc/FileSystem/my_ls/a.out 01edb000-01f04000 rw-p 00000000 00:00 0 [heap] 3a19a00000-3a19a1f000 r-xp 00000000 08:03 521237 /lib64/ld-2.13.so 3a19c1e000-3a19c1f000 r--p 0001e000 08:03 521237 /lib64/ld-2.13.so 3a19c1f000-3a19c20000 rw-p 0001f000 08:03 521237 /lib64/ld-2.13.so 3a19c20000-3a19c21000 rw-p 00000000 00:00 0 3a19e00000-3a19f91000 r-xp 00000000 08:03 521239 /lib64/libc-2.13.so 3a19f91000-3a1a191000 ---p 00191000 08:03 521239 /lib64/libc-2.13.so 3a1a191000-3a1a195000 r--p 00191000 08:03 521239 /lib64/libc-2.13.so 3a1a195000-3a1a196000 rw-p 00195000 08:03 521239 /lib64/libc-2.13.so 3a1a196000-3a1a19c000 rw-p 00000000 00:00 0 3a1b600000-3a1b615000 r-xp 00000000 08:03 521351 /lib64/libgcc_s-4.5.1-20100924.so.1 3a1b615000-3a1b814000 ---p 00015000 08:03 521351 /lib64/libgcc_s-4.5.1-20100924.so.1 3a1b814000-3a1b815000 rw-p 00014000 08:03 521351 /lib64/libgcc_s-4.5.1-20100924.so.1 7f9862898000-7f986289b000 rw-p 00000000 00:00 0 7f98628c5000-7f98628c7000 rw-p 00000000 00:00 0 7fff4aa09000-7fff4aa2a000 rw-p 00000000 00:00 0 [stack] 7fff4aa8e000-7fff4aa8f000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Abandon (core dumped)
Et le .h des structures associées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 llist add_names_list() /* Ajout des noms de fichiers dans ma liste chainée */ { struct node *new; struct dirent *dirent; DIR *dir; llist liste; dir = opendir("."); while ((dirent = readdir(dir)) != NULL) { new = malloc(sizeof(struct node )); new->nom = dirent->d_name; new->next = liste; liste = new; } closedir(dir); return liste; void aff_list (llist const *liste) /* Display de la liste chainée */ { struct node const *p = *liste; while (p != NULL) { printf ("%s -> ", p->nom); p = p->next; } printf ("Fin de liste\n"); } void ls_l() /* Ici simple display de la liste, pas encore triée */ { llist list; list = add_names_list(); aff_list(&list); closedir(dir); }
Le truc incompréhensible c'est que le closedirr(dir) de ls_l(), qui prend un parametre un DIR* non initialisé, si je le vire, ça segfault d'entrée alors qu'il est présent dans ma fonction d'ajout dans la liste chainée ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct node { char const *nom; struct node *next; }node; typedef struct node* llist;
Si vous pouviez m'aider ce serait sympa, merci![]()
Partager