Hugo Dam
Messages postés13Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention28 avril 2008
-
14 févr. 2008 à 22:50
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 2010
-
15 févr. 2008 à 00:45
Bonsoir,
J'ai un projet en langage C, dans lequel il me faut créer un arbre contenant les mots d'un dictionnaire contenu dans un fichier texte. J'arrive bien à extraire les mots du fichier txt, mais j'ai un probléme avec la constitution de l'arbre
Et ensuite le programme principale :
int main()
{
//Déclaration des variables utilisées dans le programme
char path[20];
FILE *readinput;
char mot[100];
char bv[100];
char tgn[100];
char dico[200];
long taille,cpt;
char temp;
char tps[4];
//Arbre contenant le dictionnaire
Arbre abr;
Arbre arbre;
abr=(Sommet*)malloc(sizeof(Sommet));
arbre=abr;
//Définition de la table de hachage
str_hash table[3000];
//Programme principal
printf("***************Projet SDD***************\n");
path_dico(path);
puts(path);
readinput=fopen(path,"r"); // Ouverture du fichier texte contenant le dictionnaire
//Ajout des mots dans l'arbre
printf("Chargement du dictionnaire...\n");
while(!feof(readinput))
{
fscanf(readinput,"%s\t%s\t%s\n",mot,bv,tgn);
taille=strlen(mot);//Taille du mot à entrer
abr=arbre;
for(cpt=0;cpt<taille;cpt++)
{
switch(mot[cpt])
{
case 'a':
if(abr->a==NULL) //Si le sous arbre de la lettre n'existe pas on le crée
{
abr->a=(Sommet*)malloc(sizeof(Sommet));
abr=abr->a;
abr->lettre='a'; //On met la lettre corespondante
}
else{
abr=abr->a; //Si il existe, on met la lettre dans le champ 'lettre'
abr->lettre='a';
}
break;
default:
break;
}
}
Il n'ya pas d'erreur à la compilation, mais lors de l'exécution. Windows me renvoie une erreur !
Ici, il n'y a que la lettre a de définis, il reste tout les autres lettres de l'aphabet.
Est ce qu'il aurait une erreur qui saute au yeux que je n'aurais pas vu ?
Merci d'avance !
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 15 févr. 2008 à 00:45
Quand tu crées une structure Sommet, ses membres ne sont pas initialisés; en particulier les pointeurs ne valent généralement pas NULL; or quand tu charges ton mot tu testes if(abr->a==NULL) ce qui renverra faux alors que la mémoire n'a pas été allouée : pour corriger ce problème crées une fonction initialisant les membres de la structure, ou utilises ZeroMemory()