免费注册 查看新帖 |

Chinaunix

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

free 实现不同? [复制链接]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
11 [报告]
发表于 2009-04-22 11:13 |只看该作者
C库的实现 跟 操作系统有关吗?也就是在aix系统,C库可以由aix实现的,而在linux下,C库由linux实现???

论坛徽章:
0
12 [报告]
发表于 2009-04-22 11:21 |只看该作者

论坛徽章:
0
13 [报告]
发表于 2009-04-22 11:33 |只看该作者
俺认为去关注这种"未定义"行为是不值得的.

论坛徽章:
0
14 [报告]
发表于 2009-04-22 11:43 |只看该作者
原帖由 converse 于 2009-4-22 11:33 发表
俺认为去关注这种"未定义"行为是不值得的.


非常同意~~~ (除非是要准备自己写编译器或C库了, 借鉴一下成熟的编译器或C库对这些"未定义"是如何处理的)

[ 本帖最后由 kouu 于 2009-4-22 12:16 编辑 ]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
15 [报告]
发表于 2009-04-22 12:54 |只看该作者
如何防止 p1=p2=malloc(..),free(p1);free(p2); 这种情况呢

论坛徽章:
0
16 [报告]
发表于 2009-04-22 13:07 |只看该作者
p1=p2=malloc(..),free(p1);free(p2);
这样的代码真强大

论坛徽章:
0
17 [报告]
发表于 2009-04-22 14:43 |只看该作者
原帖由 chenzhanyiczy 于 2009-4-22 12:54 发表
如何防止 p1=p2=malloc(..),free(p1);free(p2); 这种情况呢


除了程序员自身拒绝写出这样的代码,还有什么办法? :wink:

论坛徽章:
0
18 [报告]
发表于 2009-04-22 16:21 |只看该作者
gcc默认链接的是动态的libc.so,这个可以用ldd命令来查看。
比如

  1.     ldd a.out
复制代码

能够列出你的程序使用的所有动态库。

至于释放的问题。为了避免事故,在第一次释放后加上一句
p1 = NULL;
这样可以保证第二次释放的时候不会出错(释放一个NULL是可以的)
因为第一此释放后,p1指向哪块地方不可知也。
当然,最好的方法是不要写这么牛的代码,写点常规的好些

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
19 [报告]
发表于 2009-04-22 18:54 |只看该作者
原帖由 youshuang 于 2009-4-22 16:21 发表
gcc默认链接的是动态的libc.so,这个可以用ldd命令来查看。
比如

    ldd a.out

能够列出你的程序使用的所有动态库。

至于释放的问题。为了避免事故,在第一次释放后加上一句
p1 = NULL;
这样可以保 ...



libc.so 也就是 glibc库吗?

现在弄不清楚,gcc 链接的是 libc 还是glibc库? 还是libc库就是glibc库?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP