二叉树,不能释放内存

时间:2015-08-31 01:31:11

标签: c malloc binary-search-tree free allocation

我已经制作了一个二叉树(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;
    }
}

其他一切正常 - 显示顺序,显示最大和最小(一切都经常),搜索,计算节点和树高,所以它看起来像free(x)真正释放静态名字char数组,这实际上是第一个变量在struct定义中。这是我的结构:

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

SIZE定义为64。 谢谢你的帮助,我真的被卡住了:(

0 个答案:

没有答案