我正在使用搜索树,为了查看树是否结束,我检查它是否为空。
我的问题是,当我使用free()时,指针值不会变为空。
我也尝试过使用指向free的指针,然后将其设置为NULL,但没有成功。
在这种情况下,我想删除搜索树上最大的数字,但我的打印函数无法识别释放的值,而是打印0。

typedef struct nodo {
    int val;
    struct nodo *l, *r;
}   *ABin;

void print (ABin a) {
     if (a != NULL) {
         print (a -> l);
         printf(" %d ",a -> val);
         print (a -> r);
     }
}

ABin remBiggerA (ABin *a) {
    ABin b = (*a), aux = b;
    int i = 0;
    if (b == NULL) i = 1;
    while (i == 0) {
        if (b -> r == NULL) {
            free (b);
            i = 1;
        }
        else b = b -> r;
    }
    (*a) = aux;
    return aux;
}

最佳答案

在指针上调用free()之后,它不会将指针设置为空,而是使其失效这意味着进一步访问该指针地址会导致未定义的行为您无法从已释放的内存中访问或打印信息但是,您可以释放一个指针,然后立即自己将其设置为空,这是一个完全正确的做法。如果你已经这样做了,但仍然有问题,那么我怀疑你的问题出在别的地方。

10-06 15:22