指针困难......这些片段之间的区别是什么?

时间:2017-05-07 07:22:45

标签: c pointers

希望这个例子可以帮助任何其他人无法绕过指针。

请指出我在正确的方向 - 我不确定为什么这两个代码片段的行为不同。选项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);
    }

}

0 个答案:

没有答案