J'ai cette fonction "charger" où je lis les mots d'un dictionnaire et les mets dans une table de hachage de listes chaînées. Lorsque j'essaie de lire une ligne et de l'enregistrer dans mon nouveau_node-> texte, le compilateur renvoie SEGMENTATION FAULT et je ne sais pas pourquoi. L'erreur apparait quand j'utilise strncpy.SEGMENTATION FAULT dans strncpy - charger du dictionnaire
#define HASHTABLE_SIZE 76801
typedef struct node
{
char text[LENGTH+1];
//char* text;
//link to the next word
struct node* next_word;
}
node;
node* hashtable[HASHTABLE_SIZE];
bool load(const char* dictionary)
{
FILE* file = fopen(dictionary,"r");
unsigned long index = 0;
char str[LENGTH+1];
if(file == NULL)
{
printf("Error opening file!");
return false;
}
while(! feof(file))
{
node * new_node = malloc(sizeof(node)+1000);
while(fscanf(file,"%s",str) > 0)
{
printf("The word is %s",str);
strncpy(new_node->text,str,LENGTH+1);
//strcpy(new_node->text,str);
new_node->next_word = NULL;
index = hash((unsigned char*)new_node->text);
if(hashtable[index] == NULL)
{
hashtable[index] = new_node;
}
else
{
new_node->next_word = hashtable[index];
hashtable[index] = new_node;
}
n_words++;
}
//free(new_node);
}
fclose(file);
loaded = true;
return true;
}
Vous devez être prudent avec 'strncpy' car il se peut qu'il ne termine pas la chaîne. Et pourquoi allouez-vous 1000 octets supplémentaires pour le noeud? –
En outre, utilisez un débogueur pour savoir où le crash se produit. Il vous permettra également de voir la pile d'appel pour voir comment vous avez fini là où se trouve l'accident, et vous permettra d'examiner les variables pour vous aider à comprendre pourquoi il a peut-être planté. –
'node * new_node = malloc (sizeof (node) +1000);' Quoi? Pourquoi les 1000 octets supplémentaires? –