我有一个创建链表的结构,我如何释放分配的记忆?
typedef struct linked_list {
struct linkedl_ist *number;
POINTER house;
} list;
typedef list *LIST;
typedef void pointer
我有以下列表
LIST l1;
l1 = some_function(pointer);
这些l1
是使用一些变量构造的。这是我提到的链表数据结构。如何释放为l1
分配的内存?
[编辑]
l1
保存8字节的内存。
答案 0 :(得分:3)
l1
不需要被释放。它在堆栈上。从您所在的功能返回,它将自动消失。释放l1
指向的方法与释放列表其余元素的方法相同:遍历列表(使用->number
)并释放每个元素。
LIST node = l1;
LIST next;
while (node != NULL)
{
next = node->number;
free(node);
node = next;
}
答案 1 :(得分:2)
你必须单独释放内存指针。这里没有真正的灵丹妙药,你必须遍历链表并释放每个节点的指针,然后如果链接列表本身是动态分配的,你必须释放它。
以正确的顺序释放内容非常重要,因此您不会以dangling pointers结束。换句话说,如果你有指针p指向另一个指针p2,你需要确保释放p2然后p。在释放p2之前你不想释放p,因为当你试图释放p2时,你会通过一个悬空指针去做(例如free(p-> p2)但是p已经被释放了。)
答案 2 :(得分:1)
我认为您应该手动释放列表中的每个元素,从l1开始,然后是l1->数字等。