bonjour à tous

jai un probleme dans mon code,
il plante et je sais pas pourquoi
en fait il extrait des paire de mot du texte et les stocke dans une table de hachage
une aide de votre part svp
merci
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define TAILLEHASH 30700
#define BUFFSIZE 64
#define FNAME "c:\\out.txt"
 
typedef struct L
{	int freq;
	char mot[50];
 
	struct L *suivant;
} Liste;
 
 
 
char* get_word(FILE *fdesc, char *buff, size_t size)
{
	char *ret=NULL;
 
	if( fdesc!=NULL && buff!=NULL && size>0 )
	{
		int c;
		int i=0;
		while( ret==NULL && i<size && (c=fgetc(fdesc))!=EOF )
		{
			if( isalpha(c) )
			{
				buff[i]=c;
				i++;
			}
			else if( i>0 )
			{	/* mot */
				buff[i]='\0';
				ret=buff;
			}
		}
	}
	return ret;
}
 
void insere_table(Liste **TableHash,  char  mot[50]);
unsigned int hash_cle(const char mot[50]);
 
 
int main(void)
{
	FILE *fdesc=fopen(FNAME,"r");
	Liste **TableHash;
	char res[BUFFSIZE];
 
	if( fdesc )
	{
		char *buff;
		char *prec;
		char vide[256];
 
 
 
		if( get_word(fdesc,prec,BUFFSIZE) )
		{
			while( get_word(fdesc, buff, BUFFSIZE) )
			{
				printf("%s %s\n",prec,buff);
 
 
 
 
				//insere_table(TableHash, prec);
				strncpy( prec,buff,BUFFSIZE);
			}
		}
		fclose(fdesc);
	}
 
	return 0;
}
 
void insere_table(Liste **TableHash,  char  mot[50])
{
	/* calcule le hash du mot */
	unsigned int idx = hash_cle(mot);
 
 
 
	/* recherche du mot */
	Liste *p = TableHash[idx];
	while(p != NULL)
	{
		if(strcmp(p->mot, mot) == 0)
		{
			/* le mot est trouve */
			break;
		}
		p =p->suivant;
	}
 
	if(p == NULL)
	{
		/* le mot n'existe pas, insertion de celui ci */
		p = (Liste *)malloc(sizeof(Liste));
		if(p == NULL)
		{
			/* erreur d'allocation de memoire */
			printf("Erreur d'allocation mémoire\n");
			exit(0);
		}
 
		/* initialisation de la structure */
 
		p->freq = 1;
		strncpy(p->mot, mot, sizeof(p->mot));
 
 
 
		/* mise a jour des liens, insertion en debut de liste */
		p->suivant = TableHash[idx];
		TableHash[idx] = p;
		return;
	}
 
	/* le mot existe */
	/* ajout des coordonnees */
 
}
 
unsigned int hash_cle(const char mot[500])
{
	unsigned int val = 0;
	for(; *mot != '\0'; ++mot)
	{
		val = *mot + 31 * val;
	}
	return val % TAILLEHASH;
}