释放链接列表中的节点

时间:2016-03-16 00:49:02

标签: c struct

我试图释放链接列表中的每个节点,这些节点是在addRec函数中分配的。

更改:将我的自由功能重命名为free_list。

我的免费电话如下:

main()
{
    struct record * start = NULL;
    runmenu(......,start); //Ends when user chooses option to quit
    .
    . 
    free_list(start);
}

void runmenu(.....,struct record * pstart)
{
    addRec(&start,....);
}

void addRec(struct record ** start,.....)
{
    struct record *toAdd;       
    toAdd = (struct record*)malloc(sizeof(struct record));

    if (*start = NULL)
    {
        *start = toAdd;
    } else {
        struct record *current = start;
        toAdd->next = current->next;
        current->next = toAdd;
        . 
        . //Adds into linked list
    }
}

我的自由功能如下:

void free_list(struct record* head)
{
    struct record *temp;

    while((temp = head) != NULL)
    {
    head = head->next;
    free(temp);
    }
}

我似乎仍然有内存泄漏。这是对的吗?

1 个答案:

答案 0 :(得分:1)

您提供了自己的名为free()的功能,这意味着标准功能无法使用。重命名您的函数free_list()并在main()中调用它以释放列表。在(现已重命名)free_list()函数内,您仍然可以调用标准free()函数。