#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
,这是一种行为,这是一种行为,并且由于它是未定义的,所以实际上可能是其他任何行为。