我已经获得了以下结构的链接列表:
struct pomiar {
unsigned int nr_pomiaru;
unsigned int nr_czujnika;
char data_i_czas[20];
double temp;
struct pomiar *nast;
};
我用malloc()
分配所有元素:前一个元素指向每个元素。
在释放列表的同时,我应该浏览整个列表并免费使用
*nast
指针直到最后一个或我应该做什么?
答案 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>