如何释放在另一个函数中分配的节点?
struct node {
int data;
struct node* next;
};
struct node* buildList()
{
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
head = malloc(sizeof(struct node));
second = malloc(sizeof(struct node));
third = malloc(sizeof(struct node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
return head;
}
字符串
我在main()中调用buildList函数
int main()
{
struct node* h = buildList();
printf("The second element is %d\n", h->next->data);
return 0;
}
型
我想释放头,第二和第三个变量。
- 谢谢-谢谢
更新:
int main()
{
struct node* h = buildList();
printf("The element is %d\n", h->next->data); //prints 2
//free(h->next->next);
//free(h->next);
free(h);
// struct node* h1 = buildList();
printf("The element is %d\n", h->next->data); //print 2 ?? why?
return 0;
}
型
两个指纹2.调用free(h)不应该删除h吗?如果是这样,为什么h->next->data可用,如果h是空闲的。当然,“第二个”节点不会被释放。但是由于head被删除了,它应该能够引用下一个元素。你犯了什么错?
6条答案
按热度按时间p5cysglq1#
一个迭代函数来释放你的列表:
字符串
函数的作用如下:
1.检查
head
是否为NULL,如果是,则列表为空,我们只需返回1.将
head
保存在tmp
变量中,并使head
指向列表中的下一个节点(这在head = head->next
中完成1.现在我们可以安全地使用
free(tmp)
变量,而head
只是指向列表的其余部分,回到步骤1z31licg02#
简单地遍历列表:
字符串
fzsnzjdm3#
一个功能就能完成任务
字符串
xwbd5t1u4#
字符串
8hhllhi25#
你总是可以像这样递归地做:
字符串
bnlyeluc6#
字符串