0

只是试图让一些涉及指针、函数和递归的代码工作:

Node * root = malloc(sizeof(Node));
root->data = "1";
root->next = NULL;
root->child = NULL;

Node * G = NULL;
BuildGraph(root, &G);
printf("Root is: %d\n", root->data);
Print(G, ">>"); // Custom Print function

和构建图:

void BuildGraph(Node * head, Node ** G) {
    if (head->child == NULL) { // No child
        printf("Head has no child! %d\n", head->data);
        Push(head, &G);
        Print(G, ">>");
        return;
    }
    BuildGraph(head->child, &G);
    return;
}

所以当我运行程序时,我的输出是这样的:

Head has no child! 1 // printf in BuildGraph
G: 1>> // Print(G, ">>") in BuildGraph
Root is: 1
G is empty! // Print(G, ">>") in main

任何人都知道 G 没有进入 main 的原因吗?

谢谢。

4

1 回答 1

2

之内void BuildGraph()BuildGraph(head->child, &G);应该是BuildGraph(head->child, G);。不&,可能与Push(head, &G);

在您的构建函数中, G 是一个Node **. 在 main() 之外,G 是一个Node *.

考虑在 .in 中使用与 G 不同且更广泛的变量名称BuildGraph()。也许像

void BuildGraph(Node * head, Node ** AddressG) {
    if (head->child == NULL) { // No child
        printf("Head has no child! %d\n", head->data);
        Push(head, AddressG);
        Print(AddressG, ">>");
        return;
    }
    BuildGraph(head->child, AddressG);
    return;
}

我相信您的编译提供了有关此问题的警告消息。如果他们不建议调查如何打开它们。

于 2013-08-27T14:48:18.680 回答