#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;
}
我寫了一個函數來在二叉樹的根中插入一個值。在我的插入函數中,我分配了一個臨時節點,並且在將值插入到臨時節點後,我將臨時節點分配給了根節點並釋放臨時節點。我知道我可以直接將malloc放入根變量並將數據分配給它。當free(temp)被調用時會發生什麼,它會如何影響根變量?爲什麼在主函數中root的值被打印爲0?
'root-> data'具有未定義的行爲,因爲'root'是一個無效指針(它指向內存的一個釋放部分)。 –