尝试从二叉树中释放内存时出错

Error on try to free memory from a Binary Tree

我尝试递归释放内存,当我尝试显示树时,显示树已被释放的消息。 删除代码是

void stergereArbore(ArboreBin*rad) {
    if (rad) {
        stergereArbore(rad->st);
        stergereArbore(rad->dr);
        free(rad->avion.model);
        free(rad->avion.preturi);
        free(rad);
    }
}

用于显示的是

void afisareSRD(ArboreBin*a) {
    if (a) {
        afisareSRD(a->st);
        afisareAvion(a->avion);
        afisareSRD(a->dr);
    }
    else {
        printf("Empty");
    }
}

和错误信息。我对数据结构有点陌生,也许我拼错了一些东西。

该函数处理树头指针的副本。所以副本的改变不会影响树的原始头指针。

要么您应该通过对函数的引用传递头指针,要么您应该return 调用者可以将其设置为 NULL 的指向头的指针。

这里有两种方法

void stergereArbore( ArboreBin **rad ) 
{
    if ( *rad ) 
    {
        stergereArbore( &( *rad )->st );
        stergereArbore( &( *rad )->dr );
        free( *rad );
        *rad = NULL;
    }
}

而且函数可以这样调用

ArboreBin *rad = NULL;

//...

stergereArbore( &rad ); 

ArboreBin * stergereArbore( ArboreBin *rad ) 
{
    if ( rad ) 
    {
        rad->st = stergereArbore( rad->st );
        rad->dr = stergereArbore( rad->dr );
        free( rad );
        return NULL;
    }
}

而且函数可以这样调用

ArboreBin *rad = NULL;

//...

rad = stergereArbore( rad );