我有以下链接列表,其中有几个已附加到其上的节点。有没有立即释放所有笔记而不是遍历每个节点?
这是我的结构:
struct Courses{
char *courseName;
int creditValue;
Courses *next;
};Courses;
答案 0 :(得分:4)
您可以编写自己的中间分配器,分配一大块(比方说)1000个节点结构。你可以通过一次一个地从一个大块中“分配”节点来构建你的列表,用一个简单的变量来跟踪你使用了多少,以及一些代码来捕捉你已经使用它们的情况起来。
然后,当您需要释放列表时,您可以一次性释放一个块。
在您的示例中,您可能还必须担心为courseName
指针动态分配的内存。你也可以处理它,虽然你的中间分配器变得更复杂,因为它最终更像是一个通用的malloc
替换,而不仅仅是一个特殊用途的Courses
节点分配器。
答案 1 :(得分:3)
没有。除了遍历列表之外别无他法。
在现代操作系统上,一旦进程退出,操作系统将回收已分配的内存。所以你可以避免自由()自己。但这不是一个好的选择,特别是如果该程序是一个长期运行的程序,或者它也不是一种通用的自由记忆方法。