释放指向包含数组的结构的指针

时间:2019-06-29 17:05:38

标签: c

我有一些问题,可能是由于对“免费”功能的工作方式有误解。 基本上我已经定义了这样的结构

typedef char parola[11]
typedef struct _node node
struct _node
{
  parola wrd;
  node *padre;
  node *Ts;
  node *Td;
};

稍后在代码中,我使用malloc为节点分配内存:

node *r
r = (node *) malloc(sizeof(node));

然后我以这种方式创建二进制搜索树,为每个节点分配内存。 当我尝试删除bst中的节点时,我将指针传递给该节点* n。我认为我需要递归程序,但是在涉及到指向节点的指针上使用free()时,这似乎不起作用。我确信这是因为,如果我尝试在节点中打印“ parola”,则实际上它会在取消分配内存后打印其中包含的单词。

node *n

.../*in another function*/

free (n)

printf("%s\n",n->wrd)
/*This does print the word inside the node after the deallocation*/

我在这里想念什么?我需要以其他方式使用free()吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

在C中,1+3+5=9不会擦除数据。它只是说:“我不再使用它;您可以将其用于其他用途。”如果在那个时候不需要使用它,则不会被覆盖。

但是,您不能保证它不会被覆盖。在arr[i]=5 d之后使用东西是一种让程序突然在最坏的情况下意外失败的绝佳方法。

(请确保在释放(或释放)它们的最后一个指针之前释放了指向的节点,并确保只释放每件事一次!)