免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 高峰
打印 上一主题 下一主题

大家在编程过程中有没有自己比较得意的代码,共享一下,我先来我的一个。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-08-16 14:57 |只看该作者
原帖由 thynson 于 2007-8-16 14:43 发表

很多年不用不代表可以不学。而且真的很多年不用吗??或许LZ的意思是现在的数据库用的是其他的数据管理方法,比如双链表,二叉树,等,但相对于双链表和二叉树,链表还是比较基础的......至少周游链表是要比周 ...

呵呵,说的对,说的对,我改,马上学链表,这就学,这就学。

论坛徽章:
0
12 [报告]
发表于 2007-08-16 15:03 |只看该作者
基本上,现在最多就是
select count(*),
然后malloc/calloc,
然后qsort,bsearch,别的就不会了。呵呵

论坛徽章:
0
13 [报告]
发表于 2007-08-16 15:11 |只看该作者
关于这个代码
next=(char*)link+(nodesize-sizeof(long*));
free(link);
link=(void*)(*((long*)next));

有个问题...

局部变量next是希望设置为 link指向的第一个节点中next指针的地址吧?
那么free这个linke指向的节点以后;
你又准备访问这个被释放的空间??

有点看不明白您代码, 我可能理解错了

论坛徽章:
0
14 [报告]
发表于 2007-08-16 15:16 |只看该作者
原帖由 Edengundam 于 2007-8-16 15:11 发表
关于这个代码
next=(char*)link+(nodesize-sizeof(long*));
free(link);
link=(void*)(*((long*)next));

有个问题...

局部变量next是希望设置为 link指向的第一个节点中next指针的地址吧?
那么free这 ...



next=(char*)link+(nodesize-sizeof(long*));
这句是获取next的偏移地址,就是获取下一个节点的地址,由于next的值是下一个节点的地址所以有下面一句
link=(void*)(*((long*)next));

既然下一个节点的地址已经得到,那么当前节点就放心free吧


代码是没有问题的,验证过,呵呵。

[ 本帖最后由 高峰 于 2007-8-16 15:18 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2007-08-16 15:17 |只看该作者
原帖由 高峰 于 2007-8-16 15:16 发表



next=(char*)link+(nodesize-sizeof(long*));
这句是获取next的偏移地址,由于next的值是下一个节点的地址所以有下面一句
link=(void*)(*((long*)next));


代码是没有问题的,验证过,呵呵。



难道真的去访问了一个free的空间?

论坛徽章:
0
16 [报告]
发表于 2007-08-16 15:19 |只看该作者
next=(char*)link+(nodesize-sizeof(long*));
这句是获取next的偏移地址,就是获取下一个节点的地址,由于next的值是下一个节点的地址所以有下面一句
link=(void*)(*((long*)next));

既然下一个节点的地址已经得到,那么当前节点就放心free吧

论坛徽章:
0
17 [报告]
发表于 2007-08-16 15:21 |只看该作者
呵呵,看来代码还需要进一步完善啊。
其实为什么不像tsearch,twalk的那这样设计呢。
你内部的struct link结构不需要给别人知道,也许你的结构就是
struct link {
  void *data;
  struct link *next;
} _my_link;
这样也不需要费这个心机来实现通用的结构吧。

论坛徽章:
0
18 [报告]
发表于 2007-08-16 15:23 |只看该作者
原帖由 高峰 于 2007-8-16 15:19 发表
next=(char*)link+(nodesize-sizeof(long*));
这句是获取next的偏移地址,就是获取下一个节点的地址,由于next的值是下一个节点的地址所以有下面一句
link=(void*)(*((long*)next));

既然下一个节点的地址 ...



解引用是在最后一句??

我总觉得是:
next = *(link + sizeof(..))
free(linke);
link = next;

这个顺序吧???

论坛徽章:
0
19 [报告]
发表于 2007-08-16 15:26 |只看该作者
原帖由 ivhb 于 2007-8-16 15:03 发表
基本上,现在最多就是
select count(*),
然后malloc/calloc,
然后qsort,bsearch,别的就不会了。呵呵

就算这样,考试总是要过的吧...........................

论坛徽章:
0
20 [报告]
发表于 2007-08-16 15:30 |只看该作者
呵呵,是啊,是啊。基础太差,正是该补习的时候了。只是我都30多岁了,还是不要考试了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP