#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) и как она влияет на корневую переменную?Почему значение корня печатается как 0 в основной функции?
'root-> data' имеет неопределенное поведение, так как' root' является недопустимым указателем (он указывает на освобожденную часть памяти). –