| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1330 人关注过本帖
标题:求个关于链表释放的问题 。
只看楼主 加入收藏
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

应该说的是你写的数据写到了堆缓冲区之后,设个断点调试看看。

My life is brilliant
2012-11-26 16:05
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用newdos在2012-11-26 15:35:24的发言:

改成sizeof(SNode)
释放那里:         
while (NULL != head)
        {
        p = head->next;
            free(head);
        head = p;
        }

谢谢
不过我遍历释放的那种写法应该也可以吧
还想向你请教下SNode 和 LinkList 的区别。

梅尚程荀
马谭杨奚







                                                       
2012-11-26 22:14
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用lz1091914999在2012-11-26 15:35:38的发言:

你别着急啊,你这有些强制的意思哦。

呵呵 你一眼就看到问题的本质了 说明很里手呢 可以向大家宣讲下嘛
学链表的那些教程对这方面的解释比较少呢。

梅尚程荀
马谭杨奚







                                                       
2012-11-26 22:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用lz1091914999在2012-11-26 16:05:34的发言:


应该说的是你写的数据写到了堆缓冲区之后,设个断点调试看看。

调试过 到哪里就跳出那个错误了


梅尚程荀
马谭杨奚







                                                       
2012-11-26 22:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用bccnyouke在2012-11-26 15:37:28的发言:

#ifdef __WRONG_CODE__
#define STRUCT_SIZE    sizeof(LinkList)
#else
#define STRUCT_SIZE    sizeof(struct Node)
#endif
楼主这底子不行

基础不劳 地动山摇 被你说中了
我想问的是 假如已经知道sizeof(LinkList)是会出问题的 为什么还用个条件编译
万一我#define 了__WRONG_CODE__呢 。
你的意思是sizeof(LinkList)还是可以胜任某些工作?

梅尚程荀
马谭杨奚







                                                       
2012-11-26 22:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
不好意思 现在才给各位信息反馈 望谅解 请多多指教。

梅尚程荀
马谭杨奚







                                                       
2012-11-26 22:20
bccnyouke
Rank: 2
等 级:论坛游民
帖 子:26
专家分:49
注 册:2012-11-23
收藏
得分:0 
回复 15楼 有容就大
就是写个提示性的宏,告诉你区别错误/正确,免的以后再犯
开的空间小了,再写就溢出了,malloc链的结构给你破坏了
free的时候自然就错了,有兴趣可以看看malloc源码
2012-11-26 22:53
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用bccnyouke在2012-11-26 22:53:20的发言:

就是写个提示性的宏,告诉你区别错误/正确,免的以后再犯
开的空间小了,再写就溢出了,malloc链的结构给你破坏了
free的时候自然就错了,有兴趣可以看看malloc源码

呵呵 这个有点奇怪耶 用 sizeof(LinkList)还是能创建并输出一个链表 但是只有free时才出现错误
既然malloc链的结构给破坏了为什么还能正常的做一部分事情?
这算不算一种缺陷?

梅尚程荀
马谭杨奚







                                                       
2012-11-26 23:08
bccnyouke
Rank: 2
等 级:论坛游民
帖 子:26
专家分:49
注 册:2012-11-23
收藏
得分:0 
以下是引用有容就大在2012-11-26 23:08:46的发言:


呵呵 这个有点奇怪耶 用 sizeof(LinkList)还是能创建并输出一个链表 但是只有free时才出现错误
既然malloc链的结构给破坏了为什么还能正常的做一部分事情?
这算不算一种缺陷?
我说你不懂,你还不谦虚,你就是要问为什么free才错是吧?
你一直申请当然没问题,malloc不会去验证你这次申请是不是破坏了之前block的结构
你可能又要问为什么打印是对的?因为你指针指向的那片区域存的就是你的数据,没问题
只不过,你没意识到因为overflow的关系,block的结构已经完蛋了,free又不知道你破坏了
block结构,没有合适的结构去释放,还可能对?
本来呢,我看你在汇编版块学习,说明你还是想提高自己能力的,才回你的
现在看来,可能多此一举了,呵呵

[ 本帖最后由 bccnyouke 于 2012-11-26 23:27 编辑 ]
2012-11-26 23:25
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用bccnyouke在2012-11-26 23:25:03的发言:

我说你不懂,你还不谦虚,你就是要问为什么free才错是吧?
你一直申请当然没问题,malloc不会去验证你这次申请是不是破坏了之前block的结构
你可能又要问为什么打印是对的?因为你指针指向的那片区域存的就是你的数据,没问题
只不过,你没意识到因为overflow的关系,block的结构已经完蛋了,free又不知道你破坏了
block结构,没有合适的结构去释放,还可能对?
本来呢,我看你在汇编版块学习,说明你还是想提高自己能力的,才回你的
现在看来,可能多此一举了,呵呵

真心谢谢你啊 我真不懂 就是想问个明白 如果那里有言语冒犯还请多多海涵呐
 书上(如数据结构链表的讲解)对这方面的东西都是擦边球 我查资料的能力比较低找半天没弄明白
发帖求助是真心的 请您多多指教 。

这些东西是不是涉及到内存管理? 我还比较陌生 汇编学来也是坑坑洼洼的


梅尚程荀
马谭杨奚







                                                       
2012-11-26 23:35
快速回复:求个关于链表释放的问题 。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013277 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved