希望这个例子可以帮助任何其他人无法绕过指针。
请指出我在正确的方向 - 我不确定为什么这两个代码片段的行为不同。选项1工作正常,没有任何内存泄漏,但选项2丢失对其他trie节点的引用。然而,看着它们,我似乎无法找出使它们与众不同的原因。
以下是代码:
add_word将节点添加到trie数据结构。 create_trie mallocs一个新节点并返回指向该节点的指针
void add_word(trie_node **node, char *word, int i)
{
// Option 1
trie_node *new_node;
if ((*node)->branches[(int) word[i]] == NULL) {
(*node)->branches[(int) word[i]] = create_trie();
}
new_node = (*node)->branches[(int) word[i]];
if (word[i + 1] == '\0') {
new_node->end_of_word = 1;
} else {
i++;
add_word(&new_node, word, i);
}
// Option 2
trie_node *new_node = (*node)->branches[(int) word[i]];
if (new_node == NULL) {
new_node = create_trie();
}
if (word[i + 1] == '\0') {
new_node->end_of_word = 1;
} else {
i++;
add_word(&new_node, word, i);
}
}