我的程序中存在严重的分段错误问题。
代码:
bool load(const char* dictionary)
{
// creating a trie data structure
typedef struct trie
{
bool is_word;
struct trie* alphabets[27];
}trie;
trie* root = NULL;
//opening the dictionary file
FILE* infile = fopen(dictionary, "r");
if (infile == NULL)
{
return false;
}
char s[45];
int i = 0, n = sizeof(trie);
bool start = true;
trie* tmp = NULL;
for (int c = fgetc(infile); c != EOF; c = fgetc(infile))
{
c = tolower(c);
if (isalpha(c) || c == '\'')
{
s[i] = c;
i++;
start = false;
}
else if (start == false)
{
for (int j = 0; j < strlen(s); j++)
{
int c_int = (int) (s[j] - 'a');
if (tmp == NULL || root->alphabets[c_int] == NULL)
{
root->alphabets[c_int] = malloc(n);
tmp = root->alphabets[c_int];
}
else if (tmp != NULL)
{
tmp->alphabets[c_int] = malloc(n);
tmp = tmp->alphabets[c_int];
}
else if (root->alphabets[c_int] != NULL)
{
tmp = root->alphabets[c_int];
}
if (j == strlen(s) - 1)
{
tmp->is_word = true;
}
}
}
}
return true;
root->alphabets[c_int] = malloc(n);
是给出seg错误的行
答案 0 :(得分:3)
您需要为root
分配内存。
那是:
root = malloc(sizeof(trie));