C:删除链表
C: removing linked list
我得到了以下结构的链表:
struct pomiar {
unsigned int nr_pomiaru;
unsigned int nr_czujnika;
char data_i_czas[20];
double temp;
struct pomiar *nast;
};
我正在使用 malloc()
分配所有元素:每个元素都由前一个元素指向。
While freeing the list, should I go through the whole list and free
the *nast
pointers till the last one or what exactly should I do?
您需要释放所有分配给列表节点的内存。
如果支持列表声明为
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
,可以作为空列表重新使用。
是的。为了释放列表,您必须遍历整个列表并显式释放每个节点。
void list_free(struct pomiar *head)
{
struct pomiar *tmp = head;
while(head)
{
head = head->next;
free(tmp);
tmp = head;
}
}
链表是一种数据结构,它不同于组non-contiguous个内存位置。这就是您必须遍历整个链表的原因。如果它是一个数组,您只需要一个指向第一个元素的指针,然后对其调用 free 就可以了,因为在数组中 它是连续的内存位置。
是的,您应该遍历列表,复制当前元素的 nast
指针,然后释放当前元素,然后将复制的 nast
值放入当前元素.内存空闲后您无法(可靠地)访问它 — 不要!因此复制。
void free_list(struct pomiar *list)
{
while (list != NULL)
{
struct pomiar *nast = list->nast;
free(list);
list = nast;
}
}
我得到了以下结构的链表:
struct pomiar {
unsigned int nr_pomiaru;
unsigned int nr_czujnika;
char data_i_czas[20];
double temp;
struct pomiar *nast;
};
我正在使用 malloc()
分配所有元素:每个元素都由前一个元素指向。
While freeing the list, should I go through the whole list and free the
*nast
pointers till the last one or what exactly should I do?
您需要释放所有分配给列表节点的内存。
如果支持列表声明为
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
,可以作为空列表重新使用。
是的。为了释放列表,您必须遍历整个列表并显式释放每个节点。
void list_free(struct pomiar *head)
{
struct pomiar *tmp = head;
while(head)
{
head = head->next;
free(tmp);
tmp = head;
}
}
链表是一种数据结构,它不同于组non-contiguous个内存位置。这就是您必须遍历整个链表的原因。如果它是一个数组,您只需要一个指向第一个元素的指针,然后对其调用 free 就可以了,因为在数组中 它是连续的内存位置。
是的,您应该遍历列表,复制当前元素的 nast
指针,然后释放当前元素,然后将复制的 nast
值放入当前元素.内存空闲后您无法(可靠地)访问它 — 不要!因此复制。
void free_list(struct pomiar *list)
{
while (list != NULL)
{
struct pomiar *nast = list->nast;
free(list);
list = nast;
}
}