这是我的CS50任务。我必须制作一个拼写检查器,将字典加载到数据结构中。在文件大小增加之前,段错误不会发生。
:(a+b)
将字典加载到内存中。
//Trie structure
typedef struct node {
bool is_word;
struct node* children[27];
}node;
node* root;
// maximum length for a word
#define LENGTH 45
//global counter for total words in dic
int SIZE = 0;
答案 0 :(得分:0)
我不确定这是否是主要问题,但这部分代码缺乏健壮性:
int letter_pos = tolower(word[i]) - 'a';
如果letter_pos
此时无效(例如因为word[i]
不是字母),那么所有后续操作都会产生UB。
我至少会在这里添加一个assert
:
int letter_pos = tolower(word[i]) - 'a';
assert(letter_pos >= 0 && letter_pos < sizeof(nav->children) / sizeof(nav->children[0]));
由于您的数组大小为27,我猜您想将最后一个元素用于非字母字符,因此您可能希望使代码更像这样:
int letter_pos;
if (isalpha(word[i])) // if 'A'..'Z' or 'a'..'z'
letter_pos = tolower(word[i]) - 'a'; // index = 0..25
else
letter_pos = 'z' - 'a' + 1; // index = 26
assert(letter_pos >= 0 && letter_pos < sizeof(nav->children) / sizeof(nav->children[0]));