免费注册 查看新帖 |

Chinaunix

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

继续观察 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-01 13:34 |只看该作者 |倒序浏览
void Test(void)
{
char *str=(char*)malloc(100);
strcpy(str,"hello");
free(str);
if(str!=NULL)
{
strcpy(str,"world");
printf(str);
}
}
打出world

论坛徽章:
0
2 [报告]
发表于 2005-12-01 13:37 |只看该作者
free只是释放了str指向的内存,但是str的值不会变成null的,free后str=NULL

论坛徽章:
0
3 [报告]
发表于 2005-12-01 14:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2005-12-01 15:01 |只看该作者
应该是2楼说的那样?free应该是指针和指针所指向的内存区域失去指向关系?而free则指向NULL,至于原来指针指向的那块内存区域的数据应该是还没变的吧?只是无法再获取它了

论坛徽章:
0
5 [报告]
发表于 2005-12-01 15:01 |只看该作者
free后再用str是非法的,但不一定会出错。内存还是存在的,str也还指向他,但这块内存并没有分配给这个程序

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2005-12-01 15:04 |只看该作者
我靠,乱弹琴。
真是在瞎搞,free之后你还在用这块内存,那就是在玩火。
因为这块内存释放了就没有被标记,指不定什么时候就被别人分配过去,结果两个程序往同一快内存中不加互斥的读啊写啊....

论坛徽章:
0
7 [报告]
发表于 2005-12-01 15:05 |只看该作者
但是怎么会出现这样的结果:
char *str=(char*)malloc(100);
strcpy(str,"hello");
free(str);
printf(str);
编译不提示错误,打印出来的却不是hello,应该可以说明str不是指向hello的了啊

论坛徽章:
0
8 [报告]
发表于 2005-12-01 15:06 |只看该作者
楼上别生气,我只是想测试一下。呵呵

论坛徽章:
0
9 [报告]
发表于 2005-12-01 15:08 |只看该作者
free(str)后加str=NULL
是最好的习惯。 free并不会帮你把
str=NULL

论坛徽章:
0
10 [报告]
发表于 2005-12-01 16:29 |只看该作者
原帖由 ancientlegend 于 2005-12-1 15:05 发表
但是怎么会出现这样的结果:
char *str=(char*)malloc(100);
strcpy(str,"hello");
free(str);
printf(str);
编译不提示错误,打印出来的却不是hello,应该可以说明str不是指向hello的了啊


错误的代码,不一定每次都出错。
多试几次,能打出hello来的。
我这就可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP