【发布时间】:2017-05-28 01:14:36
【问题描述】:
我正在使用搜索树,为了查看树是否结束,我检查它是否为空。 我的问题是当我使用 free() 时,指针值不会变为 NULL。
我也尝试过使用指向 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;
}
【问题讨论】:
-
typedef指针通常是个坏主意。 -
我已经给出了最好的答案,我可以给出提供的信息,但是如果你将释放的指针设置为 null 并且你的 null 检查仍然没有注册,那么你正在经历一个完全不同的(几乎可以肯定基于逻辑的)问题。是否可以发布一个最低限度的可验证示例?
标签: c memory null free search-tree