永发信息网

函数test的返回结果??

答案:3  悬赏:10  手机版
解决时间 2021-07-20 21:10
  • 提问者网友:孤凫
  • 2021-07-20 16:48

void test(void){
char *str=(char *)malloc(100);
strcpy(str,"hello");
free(str);
if(str!=NULL){
strcpy(str,"world");
printf(str);
}
}

A hello B world C 不可预测 D core dump

最佳答案
  • 五星知识达人网友:不想翻身的咸鱼
  • 2021-07-20 18:19
D
全部回答
  • 1楼网友:掌灯师
  • 2021-07-20 20:54

明显是D

  • 2楼网友:孤独的牧羊人
  • 2021-07-20 19:49

应该是B

free(str)仅仅是清空了str指向的这100字节内存,并未把str置成NULL,所以if语句是成立的,而且这块内存此时在这个程序的进程空间中并未收回,strcpy是有效且正确的。不过说实话,我拿不准是不是应该是C,这种内存操作的结果确实是很不可预测的,说不定不同操作系统、不同编译环境结果还有差异

这个程序告诉我们,free或者c++里面的delete之后,保险起见最好手动进行一次NULL设置,这是一个良好的变成习惯,我通常也是这样写代码的,安全第一

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯