一道简单而奇怪+有趣的c++小编程!!
答案:6 悬赏:70 手机版
解决时间 2021-03-22 13:36
- 提问者网友:黑米和小志
- 2021-03-22 03:02
一道简单而奇怪+有趣的c++小编程!!
最佳答案
- 五星知识达人网友:毛毛
- 2021-03-22 04:03
因为malloc和free函数是包含在命名空间STD 中的,如果去掉了命名空间,则申请空间那一句是没有作用的,释放空间那一句也没有作用,str此时仅仅是被定义的一个空的字符串指针而且没有初始化,而一旦去掉注释行,str 此时申请了空间,虽然后来释放了数据,但是因为它申请了空间,所以指针不为空,此时重新读入world,然后输出来
全部回答
- 1楼网友:神鬼未生
- 2021-03-22 09:35
这和注释不注释没关系。free以后,指针只是提交给系统,表示这块内存被系统回收,可以再次分配给其他地方。至于值是不是等于NULL,这个不确定。所以,代码输出或不输出,只是一个随机事件,甚至可能崩溃。只是你运气好,这块内存没有被其他地方使用,所以正常输出,否则,直接崩溃。
- 2楼网友:患得患失的劫
- 2021-03-22 08:39
亲测都能输出,应该是编译器不同的问题,有bug很正常追问???真的??我用的codeblocks,gcc啊,应该是相当标准啊。
- 3楼网友:第幾種人
- 2021-03-22 07:55
你这个是“未定义行为”,你free掉str后,再给str赋值,编译器可以马上给你报错,或者产生运行时错误(GCC上就是这样)。
VS2012则是三种情况都可以输出。追问嗯,gcc和vc++ 6.0 输出结果确实不一样,都没崩溃。。
VS2012则是三种情况都可以输出。追问嗯,gcc和vc++ 6.0 输出结果确实不一样,都没崩溃。。
- 4楼网友:醉吻情书
- 2021-03-22 06:27
free(str)后,str不会指向NULL,指向应该不变。
释放str后,原申请的内存资源归还给系统了,是否分配出去是未知的,所以接着执行strcpy(str,"wolrd")是不可取的。
释放str后,原申请的内存资源归还给系统了,是否分配出去是未知的,所以接着执行strcpy(str,"wolrd")是不可取的。
- 5楼网友:鸠书
- 2021-03-22 05:21
写的不规范,通常free之后是需要将指针置空的,这样就不会出现这种问题!
这就跟你写了
int i;
printf("%d", i);
可能每次输出结果都不一致一样。
这就跟你写了
int i;
printf("%d", i);
可能每次输出结果都不一致一样。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯