You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Code::Blocks运行C语言AVL树代码返回0xC0000005错误如何解决

错误原因与修复方案

你代码中存在多个会触发空指针访问、非法内存访问的错误,对应修改如下:

  • 判断逻辑写错,误将相等判断==写成赋值=
    三处有问题的代码:
    1. makeBalance函数中if (node = NULL)改为if (node == NULL)
    2. deleteN函数中if(root=NULL)改为if(root == NULL)
    3. search函数中if(root = NULL)改为if(root == NULL)
      这类错误会直接把指针强制赋值为NULL,后续访问指针成员就会触发0xC0000005错误。
  • printf用法错误
    preorder函数中printf(root->data);改为printf("%d ", root->data);
    printf第一个参数要求是字符串格式,直接传入int类型会把数值当成内存地址访问,触发非法内存访问报错。
  • 未接收树操作函数的返回值
    AVL树的插入、删除操作可能会修改根节点,函数返回值是新的根节点,主函数中对应修改:
    1. insert(root, number2);改为root = insert(root, number2);
    2. deleteN(root, number2);改为root = deleteN(root, number2);
  • 冗余错误逻辑删除
    主函数case4是前序遍历,不需要用户输入数值,删除该行scanf("%d", &number2);
  • 可选优化:完善search函数逻辑
    search函数递归调用缺少return,修改为:
    struct node* search(struct node *root, int data)
    {
        if(root == NULL)
        {
            printf("未找到该节点\n");
            return NULL;
        }
        else if(data == root->data)
        {
            printf("找到该节点\n");
            return root;
        }
        else if(data < root->data)
        {
            return search(root->left, data);
        }
        else
        {
            return search(root->right, data);
        }
    }
    

内容的提问来源于stack exchange,提问作者이건웅

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:02