Bien le bonjour!

Voilà la situation: je suis une brèle en C (voilà, ça c'est dit) et je suis en train désespérément de créer un programme pour le projet d'un pote.
Le but, pour le moment, est de parcourir une arborescence à partir d'une adresse donnée et d'écrire les adresses absolues de tous les fichiers qui s'y trouvent dans un fichier texte.

Et voilà, j'ai une erreur de segmentation et je sais pas d'où elle vient et où j'ai pu merder dans mon code... (c'est quoi au juste une erreur de segmentation? Ca peut venir d'où en général, c'est du à quoi?)

Voilà le code:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <fcntl.h>
 
#define max 1024
#define taille 25000
 
 
int CreerDB(char *adresserecherche, int db)
{
	int ecriture;
	DIR *repertoire;
	struct dirent *d;
	struct stat *stbuf;
	char adresse[max];
	char temp[max];
	int x=256;
	int y=32;
	int z=4;
 
	//On copie le chemin de base afin de ne pas le modifier
	strcpy(adresse, adresserecherche);
 
	//On ouvre le dossier qui correspond
	repertoire=opendir(adresse);
 
	if (repertoire==NULL)
	{
		printf("\nErreur lors de l'ouverture du dossier : %s\n",adresse);
		perror("opendir");
		exit(0);
	}
 
	//Et on lit dans le dossier
	while ((d=readdir(repertoire))!=NULL)
	{
		if (d->d_name[0]!='.')
		{
 
			//On crée le chemin complet du fichier/dossier
			strcpy(temp, adresserecherche);
			if (strcmp(temp,"/")!=0)
			{
				strcat(strcat(temp, "/"), d->d_name);
			}
			else
			{
				strcat(temp, d->d_name);
			}
			stat(temp, stbuf);
 
			//On teste si on a un dossier avec les permissions demandées
			if (stbuf -> st_mode == S_IFDIR)
			{
				printf(temp);
				//Si oui, on relance la fonction sur ce nouveau dossier
				CreerDB(temp, db);
			} 
			//Ensuite on regarde s'il y a un fichier qui correspond aux permissions demandées
			else if (stbuf -> st_mode == S_IFREG)
			{
				strcat(temp,"\n");
 
				//Et si c'est le cas, on écrit son adresse
				if ((ecriture=write(db, temp, strlen(temp)))==-1)
				{
					perror("write");
				exit(0);
				}
			}
		}
	}
 
	//On ferme les dossiers ouverts à chaque récursion :
	closedir(repertoire);
}
 
 
 
int main()
{
	int db;
	char nom[max];
	char adresserecherche[max]="/home/gourou/Desktop/Batman/MP3";
	char **tableau;
 
 
	//On ouvre ou crée le fichier "base_donnees"
	if ((db=open("base_donnees", O_RDWR|O_CREAT, 0755))==-1)
	{
		perror("open");
		exit(0);
	}
 
	//On utilise la fonction CreerDB pour placer toutes les adresses des fichiers/dossiers dans "base_donnees"
	CreerDB (adresserecherche, db);
 
 
	return 0;
}
Merci de votre attention, que le malloc soit avec vous.