在C中释放结构的记忆

时间:2010-12-01 20:32:08

标签: c memory-leaks

我有一个创建链表的结构,我如何释放分配的记忆?

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字节的内存。

3 个答案:

答案 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->数字等。