在
linux/list.h
的评论中写道:
>关于使用list_del_entry:注意:进入后的list_empty在此之后不返回true,该条目处于未定义状态.
>对于list_del:这仅适用于内部列表操作,我们已经知道了prev / next条目!
那么,我如何安全地从链表中删除一个对象并确保list_empty正常运行或确保下一个链表节点删除是正确的?
这是我目前的实施:
struct kool_list{ int to; struct list_head list; int from; }; struct kool_list *tmp; struct list_head *pos,*q; struct kool_list mylist; list_for_each_safe(pos,q,&mylist.list){ tmp= list_entry(pos,struct kool_list,list); printf("freeing item to= %d from= %d\n",tmp->to,tmp->from); list_del(pos); free(tmp); }