如何在我的C卸载函数中调试“未定义的引用”?

时间:2017-02-20 12:46:58

标签: c cs50

这是卸载功能代码。

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

1 个答案:

答案 0 :(得分:2)

您应该定义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替换为包含树根的全局变量的名称。