数据结构返结点创建树里的if问题

创建树的函数中,我用的是返回结点的方式创建的,但编译时电脑管家说生成的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;
}
}