在评论中linux/list.h
写道:
- On using
list_del_entry
: 注意:list_empty
在此之后,on entry 不会返回 true,该条目处于未定义状态。 - For
list_del
:这仅适用于我们已经知道上一个/下一个条目的内部列表操作!
那么,我将如何安全地从链表中删除一个对象并确保它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);
}