Двоичное дерево, не может освободить память

Я создал двоичное дерево (BST), и оно работает просто отлично, но я не могу освободить выделенную память. Узлы состоят из указателей (левый, правый, родительский) и данных, которые представляют собой имя, имя и номер телефона. Имя и имя - это статические массивы символов, а номер телефона имеет тип int, и это также ключ для моего дерева. Я использую эту функцию, чтобы освободить память:

void FreeYourTree(node* x)
{
    if (!x)
        return;
    FreeYourTree(x->left);
    FreeYourTree(x->right);
    free(x);
    x = NULL;
}

Но когда я использую эту функцию, а затем показываю свое дерево в InOrder, он все равно показывает записи, но иногда с некоторыми символами корзины вместо имени. Я действительно не могу найти, что не так с этим. Я также даю Вам свою функцию вставки:

void insert(node** root)
{
    node* x = (node*) malloc(sizeof(node));
    if (x == NULL)
    {
        printf("Malloc error");
        return;
    }
    printf("put first name: ");
    scanf("%s", x->f_name);
    printf("put name: ");
    scanf("%s", x->s_name);
    printf("put number: ");
    scanf("%ld", &(x->number));
    x->left = NULL;
    x->right = NULL;
    x->parent = NULL;

    node* a = NULL;
    node* walk = *root;
    while (walk != NULL)
    {
        a = walk;
        if (x->number < walk->number)
        {
            walk = walk->left;
        } else {
            walk = walk->right;
        }
    }
    x->parent = a;
    if (a == NULL)
    {
        *root = x;
        return;
    }
    if (x->number < a->number)
    {
        a->left = x;
    } else {
        a->right = x;
    }
}

Все остальное работает нормально - показывает inorder, показывает max и min (все рекуррентно), выполняет поиск, подсчитывает узлы и высоту дерева, поэтому похоже, что free(x) действительно освобождает статический массив char имени первого имени, который фактически является первой переменной в определении структуры, Вот моя структура:

typedef struct wezel {
    char f_name[SIZE];
    char s_name[SIZE];
    long int number;
    struct wezel* left;
    struct wezel* right;
    struct wezel* parent;
} node;

РАЗМЕР определяется как 64. Спасибо за вашу помощь, я действительно застрял:(

0 ответов

Другие вопросы по тегам