为什么 root 的值在 main 函数中打印为 0?
Why the value of root is printed as 0 in main function?
#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("%d\n",root->data);
return 0;
}
我写了一个函数来在二叉树的根中插入一个值。在我的插入函数中,我分配了一个临时节点,在将值插入临时节点后,我将临时节点分配给 root 并释放临时节点。我知道我可以直接 malloc 进入根变量并将数据分配给它。调用 free(temp) 时会发生什么,它如何影响根变量?
你不应该 free()
temp
,因为你仍然用 root
指向它,它们指向相同的数据,因此释放 temp
会释放 *root
也是。
至于它为什么打印 0
这只是巧合,因为在分配它的函数中 free()
ed root
,并在 main()
中访问它调用未定义的行为,结果可能是 printf()
打印,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("%d\n",root->data);
return 0;
}
我写了一个函数来在二叉树的根中插入一个值。在我的插入函数中,我分配了一个临时节点,在将值插入临时节点后,我将临时节点分配给 root 并释放临时节点。我知道我可以直接 malloc 进入根变量并将数据分配给它。调用 free(temp) 时会发生什么,它如何影响根变量?
你不应该 free()
temp
,因为你仍然用 root
指向它,它们指向相同的数据,因此释放 temp
会释放 *root
也是。
至于它为什么打印 0
这只是巧合,因为在分配它的函数中 free()
ed root
,并在 main()
中访问它调用未定义的行为,结果可能是 printf()
打印,0
,这是一种行为,因为它是未定义的,任何其他行为实际上都是可能的。