【发布时间】:2012-03-20 21:31:23
【问题描述】:
*强文本*我在 C 语言中创建了一个名为 lon 的链表,并借助以下函数:
struct ilist_node {
struct ilist_node * rest;
int first;
};
typedef struct ilist_node *ilist;
ilist icons(int in, ilist il) {
ilist r = malloc(sizeof(struct ilist_node));
r->first = in;
r->rest = il;
}
然后我用 icons 增加列表以创建数字列表
之后,我尝试打印列表中的每个元素并释放列表使用的内存
while (lon!= NULL) {
ilist tmp = lon->rest;
printf(" %d\n",lon->first);
free(lon);
lon = tmp;
}
我可以理解为什么上面的这个函数有效。 (我用谷歌搜索了如何释放内存,这似乎是流行的答案)。但出于好奇,我又试了一个:
ilist tmp = lon;
while (lon != NUll) {
printf(" %d\n",lon->first);
lon = lon->rest;
}
idelete(tmp);
它也有效。所以我有点困惑。如果最后一个有效,那为什么我需要遍历列表并释放每个节点?
【问题讨论】:
-
目前尚不清楚您是否想要评论循环遍历列表或释放其空间。如果我认为 idelete 确实是我们需要比较的,那么请也发布 idelete 的来源
-
啊谢谢。是的,因为我使用的是我的教授给出的idelete,而不是内置的delete。愚蠢的错误
-
通常情况下,提出问题会有所帮助!-)
-
@user1248785:请四处看看,阅读常见问题解答,等等。不要在标题前写
(solved)- 没有人这样做。如果您有足够的声誉,请接受答案(就像您所做的那样)并投票。编辑您的问题会在列表中弹出。只需使用投票系统就足够了。谢谢。