EDIT: Итак, оказывается, что «index» не возвращался к 0. Ну тогда. Это фиксировало один segfault. Но все равно получается другой segfault. Работаю над этим.Может кто-нибудь помочь мне найти segfault здесь?
node* new_node(void){
node* ptr = malloc(sizeof(node));
for (int i = 0; i<27; i++) {
ptr->next[i] = NULL;
}
return ptr;
}
bool load(const char* dictionary)
{
FILE* dict = fopen(dictionary, "r");
node* ptr = new_node;
char word[LENGTH+1];
int index = 0;
for (int c = fgetc(dict); c!=EOF; c = fgetc(dict)){
if(c!='\n'){
word[index]=c;
index++;
}
else {
for(int x=0; x<=index; x++){
int ch = (word[x] == '\'') ? 26 : tolower(word[x])-'a';
if (ptr->next[ch] == NULL){
ptr->next[ch] = new_node;
}
ptr = ptr->next[ch];
}
ptr->end=true;
}
}
return true;
}
Я пытаюсь реализовать структуру Trie данных для словаря, но моя программа, кажется, где-то в сегментации этой функции. Похоже, что я не могу прикрепить его даже с помощью GDB, так кто-то может мне помочь?
Узел определяется как таковой:
typedef struct node{
bool end;
struct node* next[27];
} node;
Файл словаря:
a
aaa
aaas
aachen
aalborg
aalesund
aardvark
aardvark's
aardvarks
aardwolf
(...)
Кроме того, всегда проверяйте правильность возврата malloc ... –
@Haris Почему это? не должна ли выделяемая память быть размером объекта-узла? – murtaza64
@Haris Я думал, что если я typedef как таковой: typedef struct node { bool end; struct node * next [27]; } узел; то я должен уметь выделять память узла размера узлу *? – murtaza64