尝试从二叉树中释放内存时出错
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 );
我尝试递归释放内存,当我尝试显示树时,显示树已被释放的消息。 删除代码是
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 );