创建树的函数中,我用的是返回结点的方式创建的,但编译时电脑管家说生成的exe是木马,我自己检查对比后发现,如果把if(val>0){}加上就能正常运行了,但即便没有这个,也应该会正常运行才对啊,这里不明白了。下面是代码,希望懂这个的同学帮忙解释一下,谢谢各位了。
bitnode* create(){
int val;
scanf("%d",&val);
if(val==-1){
return NULL;
}
bitnode*root=(bitnode*)malloc(sizeof(bitnode*));
if(!root){
printf("创建失败。\n");
}
if(val>0){
root->data=val;
root->lchild=create();
root->rchild=create();
return root;
}
}
您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~
ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓
【电脑端】戳>>> https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】 戳>>> https://mall.csdn.net/item/52471?utm_source=1146287632
这玩意最好别开杀毒程序。经常操作内存的时候就会报病毒,有时候还会莫名奇妙的运行结果出问题,debug发现内存操作被拦截了,导致一些东西失败就这样。
你这个程序也有问题的,创建失败的话没有中断掉程序的功能,反而继续执行了。
有几个问题,在代码中注释了。报木马跟if(val>0)没关系,sizeof(bitnode*)改成sizeof(bitnode)后应该就可以了,你申请的空间小了,sizeof(bitnode*)是指针的大小,sizeof(bitnode)才是结构体的大小
如下:
bitnode* create(){
int val;
scanf("%d",&val);
if(val==-1){
return NULL;
}
//修改1,sizeof(bitnode*)改成sizeof(bitnode)
bitnode*root=(bitnode*)malloc(sizeof(bitnode));
if(!root){
printf("创建失败。\n");
return NULL; //修改2,如果root是0,应该返回
}
if(val>0){ //这里判不判断都没关系
root->data=val;
root->lchild=create();
root->rchild=create();
return root;
}
}