Bonjour,
Je suis entrain d'implémenter la fonction ls -R
J'ai d'abord une fonction Liste qui (je crois) fonctionne bien...
Puis une fonction ListeRecursive qui appelle ma fonction Liste
j'ai plein d'erreur de ce type la quand je lance ma fonction ListeRecursive
Je sais que ma recursion fonctionne, car j'arrive bien a afficher la liste des sous répertoire, mais c'est quand j'appelle ma fonction Liste que je rencontre des problèmes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ls(5056) malloc: *** error for object 0x1002d0: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug
Alors je ne sais pas... quelles structures je dois allouer? Pourquoi? est-ce que je dois les "free"? Pourquoi? pfffff
Please, reconciliez moi avec le C! D'avance merci
Gabriel
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 int Liste (char* dirname){ DIR* dir; struct dirent* dirent; if (!(dir = opendir (dirname))){ perror("opendir"); return 0; } while((dirent = readdir(dir))){ if (strcmp(".",dirent->d_name) && strcmp("..",dirent->d_name)) printf("%s\n",dirent->d_name); } if (closedir(dir) != 0){ perror("closedir"); return 0; } return 1; }
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 void ListeRecursive (char* dirname){ DIR* dir; struct dirent* dirent; char* dirname_tmp; struct stat st; printf("%s:\n",dirname); if (Liste(dirname) == 0) exit(EXIT_FAILURE); if (!(dir = opendir (dirname))){ perror("opendir"); exit(EXIT_FAILURE); } while((dirent = readdir(dir))){ if (strcmp(".",dirent->d_name) && strcmp("..",dirent->d_name)){ if ((dirname_tmp = malloc(strlen(dirname)+strlen(dirent->d_name)+1)) == NULL){ perror("malloc"); exit(EXIT_FAILURE); } strcpy(dirname_tmp,dirname); dirname_tmp = strcat(dirname_tmp,"/"); dirname_tmp = strcat(dirname_tmp,dirent->d_name); if (stat(dirname_tmp,&st) == -1){ perror("stat"); exit(EXIT_FAILURE); } if (S_ISDIR(st.st_mode)) ListeRecursive(dirname_tmp); free(dirname_tmp); } } closedir(dir);
Partager