有没有办法一次性释放链表中的所有节点而不是遍历每个节点?

时间:2016-01-29 21:54:47

标签: c linked-list malloc free

我有以下链接列表,其中有几个已附加到其上的节点。有没有立即释放所有笔记而不是遍历每个节点?

这是我的结构:

struct Courses{
        char *courseName;
        int creditValue;
        Courses *next;
    };Courses;

2 个答案:

答案 0 :(得分:4)

您可以编写自己的中间分配器,分配一大块(比方说)1000个节点结构。你可以通过一次一个地从一个大块中“分配”节点来构建你的列表,用一个简单的变量来跟踪你使用了多少,以及一些代码来捕捉你已经使用它们的情况起来。

然后,当您需要释放列表时,您可以一次性释放一个块。

在您的示例中,您可能还必须担心为courseName指针动态分配的内存。你也可以处理它,虽然你的中间分配器变得更复杂,因为它最终更像是一个通用的malloc替换,而不仅仅是一个特殊用途的Courses节点分配器。

答案 1 :(得分:3)

没有。除了遍历列表之外别无他法。

在现代操作系统上,一旦进程退出,操作系统将回收已分配的内存。所以你可以避免自由()自己。但这不是一个好的选择,特别是如果该程序是一个长期运行的程序,或者它也不是一种通用的自由记忆方法。