さて、私は問題コードの簡単な例をまとめました:
#include "stdio.h"
#include "string.h"
struct Trie{
//Holds sub-tries for letters a-z
struct Trie *sub[26];
//Is this a substring, or a complete word?
int is_word;
};
typedef struct Trie Trie;
Trie dictionary;
int main(int argc, char *argv[]){
//A list of words
char *words[7] = {"the","of","and","to","a","in","that"};
//Add the words to the Trie structure
int i=0, wordlen;
Trie *sub_dict;
for (;i<7; i++){
//Reset
printf("NEW WORD\n");
sub_dict = &dictionary;
//Add a word to the dictionary
int j=0, c;
while (c = words[i][j], c != '\0'){
printf("char = %c\n",c);
//Initialize the sub-Trie
if (sub_dict->sub[c-97] == NULL)
sub_dict->sub[c-97] = (Trie*) malloc(sizeof(Trie*));
//Set as new sub-trie
sub_dict = sub_dict->sub[c-97];
j++;
}
sub_dict->is_word = 1;
}
}
基本的に、私は文字「a」から「z」を保持するTrieデータ構造を持っています。while
ループ内に追加する必要のある単語のリストがあります。残念ながら、ループ内のさまざまなポイントでセグメンテーション違反が発生します(実行するタイミングによって異なります)。
問題は回線に関係していると思います
sub_dict->sub[c-97] = (Trie*) malloc(sizeof(Trie*));
が、私は初めてなC
ので、何が起こっているのかまったくわかりません。