2

我正在尝试修改一些使用 linux 内核中使用的 C 链表的代码,例如fbida 中使用的这个但我需要真正清除列表并从头开始,我不确定最安全的方法。我也找不到网上的例子。

关于如何安全清除列表并释放所有内存的任何想法?

4

2 回答 2

0

“最安全的方式”......“释放内存”......引用的代码没有分配,完全取决于调用者/实现者来分配内存。因此,调用者/实现者必须释放分配的内存。

根据“cnicutar”,它只是遍历列表的工作,调用 list_del(),对找到的每个项目调用函数,然后根据对象的分配方式释放或删除对象。

于 2012-07-27T15:00:20.773 回答
0

也许我找到了答案(数字......)像下面这样的工作吗?

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;
    }
}
于 2012-07-27T14:55:32.393 回答