免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
31 [报告]
发表于 2008-11-07 17:45 |只看该作者
原帖由 samon_fu 于 2008-11-7 17:39 发表
这个东西就象工程中,大家都把read、write、malloc等函数包一层来使用一样的。

在工程中哪些东西最经常用的,你也可以包一下做成库来用。

比如你担心用了释放后的指针,那你包的时候只需要判断下对应指针 ...


多谢指点

论坛徽章:
0
32 [报告]
发表于 2008-11-07 17:48 |只看该作者

回复 #28 flw 的帖子

要想成为一个好的程序员(?兄弟们别老想着程序员啊),习惯很重要。
而一个好习惯的养成始于态度。

兄弟们每写一行代码的时候,想着这代码以后要给自己看,就OK了:),

很多时候思路比写、调试代码重要,思路对了,什么都好办

[ 本帖最后由 samon_fu 于 2008-11-7 17:51 编辑 ]

论坛徽章:
0
33 [报告]
发表于 2008-11-07 18:39 |只看该作者
coding 要有code德

论坛徽章:
0
34 [报告]
发表于 2008-11-07 18:49 |只看该作者
原帖由 samon_fu 于 2008-11-7 17:48 发表
要想成为一个好的程序员(?兄弟们别老想着程序员啊),习惯很重要。
而一个好习惯的养成始于态度。

兄弟们每写一行代码的时候,想着这代码以后要给自己看,就OK了:),

很多时候思路比写、调试代码重要 ...



习惯啊
习惯
码工就是可怜人儿

论坛徽章:
0
35 [报告]
发表于 2008-11-07 19:08 |只看该作者
原帖由 5毛党党员 于 2008-11-7 12:52 发表
一般都是用释放后指向NULL,每次用之前都判断是不是等于NULL吧?

或者不判断而让内核告诉你段错误

论坛徽章:
0
36 [报告]
发表于 2008-11-07 19:24 |只看该作者
原帖由 samon_fu 于 2008-11-7 17:48 发表
要想成为一个好的程序员(?兄弟们别老想着程序员啊),习惯很重要。
而一个好习惯的养成始于态度。

兄弟们每写一行代码的时候,想着这代码以后要给自己看,就OK了:),

很多时候思路比写、调试代码重要 ...



如果只是自己看,那就用不着这样了,多数时候,你写的,别人看。

论坛徽章:
0
37 [报告]
发表于 2008-11-07 20:35 |只看该作者
原帖由 nicozhou 于 2008-11-7 19:24 发表



如果只是自己看,那就用不着这样了,多数时候,你写的,别人看。



所以现在很多兄弟看别人的代码或者调试别人写的代码时很痛苦,乱的一塌糊涂。
还有就是很多兄弟应该有种感觉,就是自己写过的代码过段时间时打死都不想看了

论坛徽章:
0
38 [报告]
发表于 2008-11-07 21:34 |只看该作者
原帖由 alexhappy 于 2008-11-7 12:09 发表
释放之后赋值为NULL,引用之前检查是否为NULL



这种方法没用.

在多线程里一点用也没

比如这个线程

p = *;

free(p);
p = NULL;

另一个线程
q = *;
还在继续用....程序就挂了.
这种技术虽然危险,在消息传递的时候还是有时候会放类似的错误.


最好就是引用计数,或者写个自已管理内存分配的调试跟踪机制.

论坛徽章:
0
39 [报告]
发表于 2008-11-07 23:32 |只看该作者
最近刚完成一个项目。项目是在老外原有的代码上增加新的功能。以前写代码时习惯了在用指针前先检查一下指针是否为空。所以在这个项目也是这样做的。
但老外直接跟我们说不要那样干,那样会隐藏你的BUG。
想想也是有道理的。从逻辑上来讲,有时候根本不允许所用的指针为空,如果用判断来知道这个指针是空的,这时又要怎么办呢?输出一句话让调试的人
知道有错误了? 他们的做法是只在新申请的内存时检查是否为空,如果为空就做些内存清理的工作,腾出些空间。在其他用指针的环境下都不检查
指针是否为空。该调用方法的就调用方法,该往内存中写的就写。如果指针是空就让程序 crash 掉。这些能及时发现问题。如果不能及时发现问题,那只
能证明所做的测试还不够。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
40 [报告]
发表于 2008-11-08 15:39 |只看该作者
原帖由 雨过白鹭洲 于 2008-11-7 19:08 发表

或者不判断而让内核告诉你段错误


如果我处理的是网络数据包,当内核遇上这样的NULL时,连OOPS都没有。内核告诉我,偶要重启了,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP