C++ 清除Linux内核链接列表

C++ 清除Linux内核链接列表,c++,c,linux,list,C++,C,Linux,List,我试图修改一些使用linux内核中使用的C链表的代码,就像fbida中使用的一样。但我需要清理清单,从头开始,我不确定最安全的方法。我在网上也找不到一个例子 关于如何安全地清除列表并释放所有内存,有什么想法吗?也许我找到了答案(图…) 你想做以下工作吗 void delete_all(struct list_head *head) { struct list_head *iter; struct foo *objPtr; redo: __list_for_each(

我试图修改一些使用linux内核中使用的C链表的代码,就像fbida中使用的一样。但我需要清理清单,从头开始,我不确定最安全的方法。我在网上也找不到一个例子

关于如何安全地清除列表并释放所有内存,有什么想法吗?

也许我找到了答案(图…) 你想做以下工作吗

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;
    }
}
也许我找到了答案(数字…) 你想做以下工作吗

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;
    }
}
“最安全的方式”。。。“释放内存”。。。引用的代码不进行分配,完全由调用方/实现方分配内存。因此,调用方/实现方必须释放分配的内存

根据“cnicutar”,这只是一个迭代列表的任务,对找到的每个项调用list_del()函数,然后根据对象的分配方式释放或删除对象。

最安全的方法“。。。“释放内存”。。。引用的代码不进行分配,完全由调用方/实现方分配内存。因此,调用方/实现方必须释放分配的内存


每一个“C++”,它只是一个重复的任务,调用列表中的ListSyd()函数,找到每个项目,然后根据分配的方式释放或删除对象。只要在这件事上有发言权,你就不会发现Linux内核中使用的语言。@MikeSeymour我认为这是一个使用类似于Linux内核中所用列表的实现的用户程序。@AdamHaile当你有

std::list
的能力时,为什么要这样做?我正在修改我最初没有编写的代码。当前的实现使用内核链表,所以我试图使用相同的链表,否则我就必须重写它。请看这个问题的正确答案。为什么问题被标记为C++?只要在这件事上有发言权,你就不会发现Linux内核中使用的语言。@MikeSeymour我认为这是一个使用类似于Linux内核中所用列表的实现的用户程序。@AdamHaile当你有
std::list
的能力时,为什么要这样做?我正在修改我最初没有编写的代码。当前的实现使用内核链表,因此我尝试使用相同的链表,因为否则我将不得不重写大部分链表。有关此问题的正确答案,请参阅。更具体地说,上面的实现与您的实现@cnicutar有什么区别?只有在使用malloc、calloc、realloc时,才应该调用free()如果你移动到C++,你可能会用到“新”,这需要一个“Delphi”来自由。嗯,更具体地说,上面的和你的实现之间的区别是什么?@ cNICUTAR?你应该调用For(),只有当你使用Maloc,CaloC,RealCoc时,你才应该调用For()。(或者另一个兼容的分配例程)MS有许多其他的不可压缩的。如果你移动到C++,你可能会使用“新”,这需要“删除”。