C:删除链表

时间:2018-03-25 16:50:30

标签: c list linked-list free singly-linked-list

我已经获得了以下结构的链接列表:

struct pomiar {
    unsigned int nr_pomiaru;
    unsigned int nr_czujnika;
    char data_i_czas[20];
    double temp;
    struct pomiar *nast;
};

我用malloc()分配所有元素:前一个元素指向每个元素。

  

在释放列表的同时,我应该浏览整个列表并免费使用   *nast指针直到最后一个或我应该做什么?

4 个答案:

答案 0 :(得分:2)

是的,您应该浏览列表,获取当前元素的nast指针的副本,然后释放当前元素,然后将复制的nast值复制到当前元素中。它是免费的,你不能(可靠地)访问内存 - 不要!因此复制。

void free_list(struct pomiar *list)
{
    while (list != NULL)
    {
        struct pomiar *nast = list->nast;
        free(list);
        list = nast;
    }
}

答案 1 :(得分:1)

您需要为列表中的节点释放所有已分配的内存。

如果支持列表声明类似

struct pomiar *head = NULL;

然后该函数可以查看以下方式。

void free_list( struct pomiar **head )
{
    while ( *head )
    {
        struct pomiar *tmp = *head;
        *head = ( *head )->nast;
        free( tmp );
    }
}

并调用

free_list( &head );

在这种情况下,退出函数后原始head将等于NULL,并且可以重新用作空列表。

答案 2 :(得分:1)

是。为了释放列表,您必须遍历整个列表并明确释放每个节点。

export const Input = (props) => (
    <div className="form-group">
        <label htmlFor={ props.name }>{ props.displayName }</label>
            <input type={ props.type } value={ props.value } placeholder={ props.placeholder } 
                name={props.name} id={props.name} onChange={ props.onChange } className="form-control"/>

        { "errorText" in props ? "message" in props.errorText ? (
            <label className="label label-danger">{ props.errorText.message }</label>
        ) : "" : (
            ""
        )}
    </div>
);

答案 3 :(得分:1)

链接列表是非连续内存位置的阵列组不同的数据结构。这是您必须遍历整个链表的原因。如果它是一个数组,你只需要一个指向第一个元素的指针,并在它上面调用它,因为在数组它的连续内存位置。 < / p>