如何在我的 C 卸载函数中调试 "undefined reference"?

How to debug "undefined reference" in my C unload function?

这是卸载功能代码。

bool unload(void)
{
    void release_nodes (node* node_to_free);

    //looking for children node to free
    for (int i = 0; i < 27; i++)
    {
        if (node_to_free -> children[i])
        {
            release_nodes (node_to_free -> children[i]);
        }
    }

    free (node_to_free);

    return false;
}

这是我编译时收到的响应。

clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror   -c -o speller.o speller.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror   -c -o dictionary.o dictionary.c
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -o speller speller.o dictionary.o 
dictionary.o: In function `unload':
/home/ubuntu/workspace/pset5/speller/dictionary.c:170: undefined reference to `release_nodes'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [speller] Error 1

您应该定义 release_nodes() 函数,而不是声明它。

void release_nodes (node* node_to_free) {
    //looking for children node to free
    for (int i = 0; i < 27; i++)
    {
        if (node_to_free -> children[i])
        {
            release_nodes (node_to_free -> children[i]);
        }
    }

    free (node_to_free);
}

然后你从unload():

调用这个函数
bool unload(void) {
    if (root_node) {
        release_nodes(root_node);
        root_node = NULL;
    }
    return false;
}

root_node 替换为保存树根的全局变量的名称。