免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4918 | 回复: 11
打印 上一主题 下一主题

[函数] 请教释放链表的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-16 14:02 |只看该作者 |倒序浏览
请教
int freeLink(NODELINK head)
的实现

论坛徽章:
0
2 [报告]
发表于 2007-04-16 14:05 |只看该作者
原帖由 linux_ha 于 2007-4-16 14:02 发表
请教
int freeLink(NODELINK head)
的实现


我想讲c语言的书和数据结构的书都会讲这些,毕竟链表的操作是基础的。
如果想看看优美的实现,去看看linux里的list_head比较好。你可以在《inux kernel development》(中文译名《linux内核设计与实现》)的附录中看到详细的讲解。

论坛徽章:
0
3 [报告]
发表于 2007-04-16 14:24 |只看该作者
我写的一个例子,我觉得应该可以释放掉链表head,但测试一下发现链表依然存在,高手请指点:
void freeLink(LINKNODE head)
{
        LINKNODE t = head;
        LINKNODE p = head;

        while ((t = p->next) != NULL)
        {
                free(p);
                p = NULL;
                p = t;               
        }
}

论坛徽章:
0
4 [报告]
发表于 2007-04-16 15:14 |只看该作者
急,没人知道吗?

论坛徽章:
0
5 [报告]
发表于 2007-04-16 15:36 |只看该作者
http://lxr.linux.no/source/include/linux/list.h
这里有没有LZ 想要的呢?

论坛徽章:
0
6 [报告]
发表于 2007-04-16 16:01 |只看该作者
原帖由 linux_ha 于 2007-4-16 14:24 发表
我写的一个例子,我觉得应该可以释放掉链表head,但测试一下发现链表依然存在,高手请指点:
void freeLink(LINKNODE head)
{
        LINKNODE t = head;
        LINKNODE p = head;

        while ((t = p->next) != NULL)
         ...


最后一个节点没有释放吧
最后再加一个free(p)

还有啊,你是怎么测试得到链表依然存在呢?

[ 本帖最后由 deadlylight 于 2007-4-16 16:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-04-16 16:19 |只看该作者
freeLink后遍历一下链表head就可以了,比如打印每个节点的字符串元素

论坛徽章:
0
8 [报告]
发表于 2007-04-16 16:54 |只看该作者
这个好像又涉及比较复杂的问题了
free到底在做什么

free之后的内存有可能仍然是可以访问的,而且值也保留了下来
这是实现的问题,并不代表free失败,也不要再使用free过的那些值

所以你检测到节点的字符串,不代表他没有被free掉

论坛徽章:
0
9 [报告]
发表于 2007-04-16 17:04 |只看该作者
恩,好思路,不过,您的意思是可能,最好还是确切一些,毕竟编程不需要可能的状态,而是需要明确的思路.模糊不清要不得

论坛徽章:
0
10 [报告]
发表于 2007-04-16 17:18 |只看该作者
原帖由 linux_ha 于 2007-4-16 14:24 发表
我写的一个例子,我觉得应该可以释放掉链表head,但测试一下发现链表依然存在,高手请指点:
void freeLink(LINKNODE head)
{
        LINKNODE t = head;
        LINKNODE p = head;

        while ((t = p->next) != NULL)
         ...


如果你执行p=NULL是设置链表中的指针,参数传递应用二级指针。但free函数确实释放调了链表中的内存(最后少一个free(p))。
有一本书,叫什么《程序员面试指南》,上面有很多初级例子,可以参考一下。

[ 本帖最后由 zx_wing 于 2007-4-16 17:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP