免费注册 查看新帖 |

Chinaunix

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

如何有效的避免指针在释放之后被引用? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2008-11-09 18:42 |只看该作者
原帖由 flyeleph 于 2008-11-7 23:32 发表
最近刚完成一个项目。项目是在老外原有的代码上增加新的功能。以前写代码时习惯了在用指针前先检查一下指针是否为空。所以在这个项目也是这样做的。
但老外直接跟我们说不要那样干,那样会隐藏你的BUG。
想想 ...



怎么会隐藏BUG了?我们加判断是为了方便调试,测试的时候打印出来空指针的语句,难倒就不改了吗?

论坛徽章:
0
52 [报告]
发表于 2008-11-09 20:01 |只看该作者
原帖由 flw 于 2008-11-9 16:38 发表

看来我说的还真是一点儿也没错。
确实是阻止了你的成长。



那我想请问阁下,你是怎么拷贝字符串的?
malloc了直接copy吗?

如果buf是内存池分配出来的呢?

我写的程序需要拷贝字符串的地方,不是malloc出来的,就是从内存池出来,不确定buf是否被污染过。
而且snprint代码那么多,感觉效率没有strcpy高。

[ 本帖最后由 smzgl 于 2008-11-9 20:07 编辑 ]

论坛徽章:
0
53 [报告]
发表于 2008-11-09 20:04 |只看该作者
原帖由 samon_fu 于 2008-11-9 18:26 发表
不是有man手册吗? 想了解库函数的功能足够了啊。

另:在内核里,空指针确实是非常恐怖的一件事情,一般就是panic、crash, then reboot,呵呵。
经验丰富一点的,还是可以通过看寄存器里的东东来调试哦。



反正我初略的看了strncpy 和 snprint  没有看到哪里有说明最多的n个字符到底算不算\0,
后来仔细研究了E文,不放心才去看的代码

论坛徽章:
0
54 [报告]
发表于 2008-11-09 20:06 |只看该作者
  看错了。

[ 本帖最后由 retuor 于 2008-11-9 20:08 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
55 [报告]
发表于 2008-11-09 20:08 |只看该作者
原帖由 smzgl 于 2008-11-9 20:01 发表

那我想请问阁下,你是怎么拷贝字符串的?
malloc了直接copy吗?

如果buf是内存池分配出来的呢?

我通常用 strcpy,有时候也用 snprintf。
看需求了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
56 [报告]
发表于 2008-11-09 20:10 |只看该作者
原帖由 retuor 于 2008-11-9 20:06 发表
  看错了。

你没看错,看的很对。

论坛徽章:
0
57 [报告]
发表于 2008-11-09 20:32 |只看该作者
原帖由 flw 于 2008-11-9 20:10 发表

你没看错,看的很对。


我以为他写的是


  1. buf[strlen(buf)]='\0'.
复制代码


这可比他那句强多了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
58 [报告]
发表于 2008-11-09 20:33 |只看该作者
原帖由 retuor 于 2008-11-9 20:32 发表


我以为他写的是


buf[strlen(buf)]='\0'.


这可比他那句强多了。

差不多吧。
前面还有一行 strcpy 呢。

论坛徽章:
0
59 [报告]
发表于 2008-11-09 20:50 |只看该作者
赋值为null也不行阿,另一个引用依然会出错,我觉得还是封装一个内存管理类比较好

论坛徽章:
0
60 [报告]
发表于 2008-11-09 21:08 |只看该作者
释放后赋值NULL为好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP