【发布时间】:2016-01-29 21:54:46
【问题描述】:
我有以下链接列表,其中有几个已附加到它的节点。是否可以一次释放所有笔记而不是遍历每个节点?
这是我的结构:
struct Courses{
char *courseName;
int creditValue;
Courses *next;
};Courses;
【问题讨论】:
标签: c linked-list malloc free
我有以下链接列表,其中有几个已附加到它的节点。是否可以一次释放所有笔记而不是遍历每个节点?
这是我的结构:
struct Courses{
char *courseName;
int creditValue;
Courses *next;
};Courses;
【问题讨论】:
标签: c linked-list malloc free
您可以编写自己的中间分配器来分配(例如)1000 个节点结构的大块。您可以通过一次从大块中“分配”一个节点来构建您的列表,使用一个简单的变量来跟踪您使用了多少,以及一些代码来捕捉您已经使用它们的情况起来。
然后,当需要释放您的列表时,您可以一次性释放那一个块。
在您的示例中,您可能还需要担心为courseName 指针动态分配的内存。你也可以处理这个问题,尽管你的中间分配器变得更加复杂,因为它最终更像是一个通用的 malloc 替换,而不仅仅是一个专用的 Courses 节点分配器。
【讨论】:
没有。除了迭代列表之外别无他法。
在现代操作系统上,分配的内存将在进程退出后由操作系统回收。所以你可以避免自己释放()。但这不是一个好的选择,特别是如果程序是一个长时间运行的程序,或者它也不是一种通用的释放内存的方法。
【讨论】: