我正在尝试修改一些使用 linux 内核中使用的 C 链表的代码,例如fbida 中使用的这个。但我需要真正清除列表并从头开始,我不确定最安全的方法。我也找不到网上的例子。
关于如何安全清除列表并释放所有内存的任何想法?
“最安全的方式”......“释放内存”......引用的代码没有分配,完全取决于调用者/实现者来分配内存。因此,调用者/实现者必须释放分配的内存。
根据“cnicutar”,它只是遍历列表的工作,调用 list_del(),对找到的每个项目调用函数,然后根据对象的分配方式释放或删除对象。
也许我找到了答案(数字......)像下面这样的工作吗?
void delete_all(struct list_head *head)
{
struct list_head *iter;
struct foo *objPtr;
redo:
__list_for_each(iter, head) {
objPtr = list_entry(iter, struct foo, list_member);
list_del(&objPtr->list_member);
free(objPtr);
goto redo;
}
}