免费注册 查看新帖 |

Chinaunix

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

一个常见的指针操作错误问题 [复制链接]

论坛徽章:
0
81 [报告]
发表于 2008-09-10 11:27 |只看该作者
关键是你都已经  free(str);
怎么还用这块内存阿。

指针和指针所指向的内存是两个完全不同的概念。

论坛徽章:
0
82 [报告]
发表于 2008-09-11 08:56 |只看该作者
原帖由 mhz54 于 2008-9-9 19:46 发表
free(str);
str=NULL;//you should add this

gcc跟vc的回收机制不同
gcc free之后可能同时做了str=NULL;
而vc则没有


void free(void *ptr);
看清楚这个声明,不要胡说

论坛徽章:
0
83 [报告]
发表于 2008-09-11 11:40 |只看该作者
原帖由 whyglinux 于 2008-9-6 23:27 发表
是的,将 free 之后的指针(通常称为悬挂指针,dangling pointer)变量置 NULL 可以有效地帮助检查出因使用悬挂指针而带来的程序错误。和你的看法一样,我也觉得没有理由不去这么做,因为只要使用指针,都有犯这 ...

支持

论坛徽章:
0
84 [报告]
发表于 2008-09-11 13:49 |只看该作者

回复 #3 lenky0401 的帖子

和编译器相关
看到乱码是幸运的,正常的话是不幸运的

论坛徽章:
0
85 [报告]
发表于 2008-09-11 14:21 |只看该作者
哎,既然已经free了,那后面在用这个变量就是错误了

论坛徽章:
0
86 [报告]
发表于 2008-09-12 09:18 |只看该作者
既然楼主用到vc那么在debug版本中有专门一个判断指针是否非法的api:_CrtIsValidHeapPointer

Verifies that a specified pointer is in the local heap (debug version only).

int _CrtIsValidHeapPointer(const void *userData);

Parameter:
userData  Pointer to the beginning of an allocated memory block.

Return Value:
_CrtIsValidHeapPointer returns TRUE if the specified pointer is in the local heap. Otherwise, the function returns FALSE.

论坛徽章:
0
87 [报告]
发表于 2008-09-12 20:28 |只看该作者
原帖由 mik 于 2008-9-6 00:41 发表
free(p) 后再将 p = NULL 有时候是很有用的。特别在遍历 free 整条深度链表,至少保证前提不出错


遍历链表时应该用临时变量存储下个元素的地址吧,p = null 也就没必要了

论坛徽章:
0
88 [报告]
发表于 2008-09-12 23:17 |只看该作者
if语句里的判断条件开始出错了

论坛徽章:
0
89 [报告]
发表于 2008-09-13 00:11 |只看该作者
百家争鸣啊,路过学习一下!

论坛徽章:
0
90 [报告]
发表于 2008-09-14 11:04 |只看该作者
我昨天也在看这个~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP