免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 28775 | 回复: 89
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 08:52 |只看该作者 |倒序浏览
这个错误很常见,大家可能平时都见过
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5.    char *str = (char *) malloc(20);
  6.    strcpy(str, "hello");
  7.    free(str);
  8.    if(str != NULL)
  9.    {
  10.       strcpy(str, "world");
  11.       printf(str);
  12.    }
  13.    return 0;
  14. }
复制代码

在vc下运行结果为一对乱码,在gcc下结果是world
怎么解释啊?

论坛徽章:
0
2 [报告]
发表于 2008-09-05 09:00 |只看该作者
高质量C++编程指南 野指针 看来LZ在看这个文档

论坛徽章:
0
3 [报告]
发表于 2008-09-05 09:05 |只看该作者
文档不是说了嘛 修改野指针后果难以预料,非常危险。
而且对野指针的比较if(str != NULL)语句不起作用

gcc下貌似正常的结果 应该与编译器安排变量位置和回收变量有关

论坛徽章:
0
4 [报告]
发表于 2008-09-05 09:08 |只看该作者
申请空间,拷贝字符串,释放空间.前三步操作都没有任何问题.到if语句里的判断条件开始出错了,因为一个指针被释放之后其内容并不是NULL,而是一个不确定的值.所以if语句永远都不能被执行.这也是著名的"野"指针问题.所以我们在编写程序释放一个指针之后一定要人为的将指针付成NULL.这样就会避免出现"野"指针的出现.

[ 本帖最后由 qliu00 于 2008-9-5 09:44 编辑 ]

评分

参与人数 2可用积分 -2 信誉积分 -100 收起 理由
yangsf5 -2 恶意灌水
cugb_cat -100 恶意灌水

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2008-09-05 09:15 |只看该作者
瞎蒙的

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-09-05 09:16 |只看该作者
原帖由 qliu00 于 2008-9-5 09:08 发表
调用函数的过程中做了如下动作:
1申请一个char 类型的指针p;
2把str的内容copy到了p里(这是参数传递过程中系统所做的);
3为p指针申请了20个空间;
4返回main函数.最后程序把字符串hello world拷贝 ...

又开始胡说八道了吧?
想灌水你就直接灌,兴许版主还可以放过你,别装得跟回答问题似的。

论坛徽章:
0
7 [报告]
发表于 2008-09-05 09:20 |只看该作者

回复 #6 flw 的帖子

对不起,6楼,刚开始回答错误了

[ 本帖最后由 qliu00 于 2008-9-5 09:56 编辑 ]

评分

参与人数 1可用积分 -2 收起 理由
yangsf5 -2 恶意灌水

查看全部评分

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-09-05 09:23 |只看该作者
原帖由 qliu00 于 2008-9-5 09:20 发表
对不起,6楼,这是正确回答

对不起,看来我真的冤枉你了。
看来你真的不是骗分,
而是水平太差,建议你从现在开始再不要回答任何问题了,
好好学学别人都是怎么回答的,希望你的水平能够有所提高,不要再误导人了,谢谢!

评分

参与人数 1可用积分 +2 收起 理由
yangsf5 + 2 精品文章

查看全部评分

论坛徽章:
0
9 [报告]
发表于 2008-09-05 09:26 |只看该作者
额 qliu00的回帖 看得我稀里糊涂的

论坛徽章:
0
10 [报告]
发表于 2008-09-05 09:28 |只看该作者
原帖由 qliu00 于 2008-9-5 09:08 发表
调用函数的过程中做了如下动作:
1申请一个char 类型的指针p;
2把str的内容copy到了p里(这是参数传递过程中系统所做的);
3为p指针申请了20个空间;
4返回main函数.最后程序把字符串hello world拷贝 ...

你真是太有才了,麻烦你能不能看别人怎么回帖?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP