请教高手问题拉

jiangnancaizi 2008-12-20 11:31:45
char *str = (char *) malloc(100);
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}

问题1 : 在free后没有置为null,str虽然是野指针了,但是还是指向原来的地址,所以strcpy(str, "world")后输出应该是world吧,为啥输出是乱码啊
问题2 : 我在第三行插入printf(str)变成以下代码后,就能输出helloworld,也就是说第二个printf如我意想的那样"正常"输出了,谁能解释一下
char *str = (char *) malloc(100);
strcpy(str, "hello");
printf(str);
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SaiCT 2008-12-21
  • 打赏
  • 举报
回复
奇怪了啊,我在VC6.0中,运行这个程序就打出来的是乱码,可是调试这个程序时打出来的就是world了。等待高手解答
SaiCT 2008-12-21
  • 打赏
  • 举报
回复
很神奇的现象啊,我觉得这还是依赖于编译器吧。另外就是对于free这操作到底干了什么需要搞清楚。
lbh2001 2008-12-21
  • 打赏
  • 举报
回复
没什么解释的,这属于标准的未定义行为,编译器可以随意处理
比如,在GCC下
第一个输出world
第二个输出helloworld
你可以试试
liubuweiright 2008-12-21
  • 打赏
  • 举报
回复
你试着编译另一个程序.然后再运行,地址就不对了
liubuweiright 2008-12-21
  • 打赏
  • 举报
回复
编译器
forcal 2008-12-20
  • 打赏
  • 举报
回复
两个问题可归结为一个问题。
在free后str是野指针,虽然指向原来的地址,但该地址系统有可能重新分配,以后对str的使用,随机性很大。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧