salut à tous,
je voudrais créer une "base de données" de tous les répertoires contenu dans mon répertoire. Dans ma base, je stocke le nom du répertoire, sa date en caractères, sa taille en caractères et son type en entier (main.h):
Maintenant, je vais lister un à un les répertoireset réallouer la mémoire à chaque fois qu'un nouveau fichier est créer. J'initialise de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { char filename[256]; char filesize[7]; char filedate[16]; int filetype; } struct_file_type;
Noté que pour l'instant, il n'y a rien dedans.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct_file_type *file_type, *new_file_type; int nb_elements; nb_elements=0; file_type=malloc(sizeof(*file_type));
Maintenant je liste et teste si c'est un répertoire. Si oui je fais :
Alors la réallocation de la mémoire marche pour le premier dossier .. mais pas pour le second. J'ai bien le message Here qui s'affiche mais j'ai directement derrière un segfault, même pas le message ERREUR....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // c'est un repertoire nb_elements++; print_message_and_wait("Here"); if ((new_file_type=realloc(file_type,nb_elements*sizeof(*new_file_type))) == NULL) { print_message_and_wait("ERREUR"); } print_message_and_wait("OK"); file_type=new_file_type;
Alors plusieurs idées me viennent à l'esprit :
1) Dois-je désallouer file_type avant de faire file_type=new_file_type ?
2) Dois-je faire une copie de mémoire après la réallocation, avant le file_type=new_file_type ??? (Je suppose que oui mais je voudrais qu'on me confirme).
3) Dernier problème : D'où vient mon segfault ???![]()
Merci d'avance![]()
Partager