如何在C中删除链表?
我正在尝试使用以下定义在c中创建一个链表:如何在C中删除链表?,c,memory,linked-list,malloc,free,C,Memory,Linked List,Malloc,Free,我正在尝试使用以下定义在c中创建一个链表: /** * The definition of node and linked list. */ typedef struct _node{ void * val; struct _node * next; } node; typedef struct{ node * head; } linkedlist; 我有一个函数可以完全删除它(不是针对单个节点,而是整个列表): 我的问题是: 它有用吗 我怎么知道它是否真的有效
/**
* The definition of node and linked list.
*/
typedef struct _node{
void * val;
struct _node * next;
} node;
typedef struct{
node * head;
} linkedlist;
我有一个函数可以完全删除它(不是针对单个节点,而是整个列表):
我的问题是:
- 它有用吗
- 我怎么知道它是否真的有效
我在MacBook Pro上工作,使用gcc作为编译器。我永远不会理解为什么有编译代码的人会发布不编译的代码。但是,假设linkedlist本身需要释放,下面是我的方法(未经测试):
你试过了吗?如何在调试器中单步执行?在
linkedlist
中执行curr
的目的是什么?我编译了它,它工作正常,但我的问题是如何知道它是否真的释放了我创建的内存(malloc)。查看此代码是否工作的最佳方法?写一个intmain()
方法!您可以使用valgrind来查看是否正确释放了所有分配的内存。您可能已经更改了它,但问题中的代码仍然无法编译。如果你按照我的建议发布代码,你不会编辑,你只需要使用复制粘贴。不管怎么说,我已经克服了这一点。我已经介绍了如何清理这样一个linkedlist的代码。
void clean_list(linkedlist * ll){
node * temp;
curr = ll->head;
while(ll->curr->next != NULL){
temp = curr;
curr = curr->next;
free(temp->val);
free(temp);
}
}
void clean_list(linkedlist *pll)
{
node *pnext;
for (node *pnode = pll->head; pnode != NULL; pnode = pnext)
{
pnext = pnode->next;
free(pnode->val);
free(pnode);
}
free(pll);
}
void clean_list(linkedlist * ll){
node *temp, **ppp;
for (ppp= &ll->head; temp = *ppp; ){
*ppp = temp->next;
free(temp->val);
free(temp);
}
}