C-为什么root的值在主函数中打印为0


#include <stdio.h> 
#include <stdlib.h> 
struct nodeTree { 
    int data; 
    struct nodeTree* left; 
    struct nodeTree* right; 
};
struct nodeTree* insertRoot(struct nodeTree** root, int data) { 
    if(!(*root)) { 
        struct nodeTree *temp = malloc(sizeof(struct nodeTree));
        if(!temp) {
            exit(-1);
    } 
        temp->data = data; 
        temp->left = 0; 
        temp->right = 0; 
        (*root) = temp; 
        free(temp); 
        return *root;
    }
}

 int main() { 
    struct nodeTree *root = NULL; 
    root = insertRoot(&root,10);
    printf("%dn",root->data);
    return 0;
}

我写了一个函数,将一个值插入二进制树的根。在我的插入函数中,我分配了一个温度节点,然后将值插入温度节点后,我将温度节点分配给root并释放温度节点。我知道我可以将数据直接挂在根变量中,并将数据分配给它。当调用自由(温度)时会发生什么?它如何影响根变量?

您不应该free() temp,因为您仍然用root指向它,所以它们指向相同的数据,因此释放temp也可以免费*root

关于它为什么要打印0这只是一个巧合,因为在您分配的功能中具有free() ED root,并在main()中访问它会调用未定义的行为,结果可能是printf()打印0,这是一种行为,这是一种行为,并且由于它是未定义的,所以实际上可能是其他任何行为。

相关内容

  • 没有找到相关文章

最新更新