gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:54 24 4
gpt4 key购买 nike

我有一些问题,可能是因为误解了“免费”功能的工作原理。基本上我已经定义了这样的结构

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() 吗?

感谢您的帮助。

最佳答案

在 C 中,free 不会删除数据。它只是说“我不再使用它了;你可以用它做别的事情。”如果在那段时间没有什么需要使用它,它不会被覆盖。

但是,您不能保证它不会被覆盖。在 空闲d 之后使用东西是让您的程序在最糟糕的时刻突然、不可预测地失败的绝佳方法。

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

关于c - 释放指向包含数组的结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com