Code::Blocks运行C语言AVL树代码返回0xC0000005错误如何解决
错误原因与修复方案
你代码中存在多个会触发空指针访问、非法内存访问的错误,对应修改如下:
- 判断逻辑写错,误将相等判断
==写成赋值=
三处有问题的代码:makeBalance函数中if (node = NULL)改为if (node == NULL)deleteN函数中if(root=NULL)改为if(root == NULL)search函数中if(root = NULL)改为if(root == NULL)
这类错误会直接把指针强制赋值为NULL,后续访问指针成员就会触发0xC0000005错误。
printf用法错误preorder函数中printf(root->data);改为printf("%d ", root->data);
printf第一个参数要求是字符串格式,直接传入int类型会把数值当成内存地址访问,触发非法内存访问报错。- 未接收树操作函数的返回值
AVL树的插入、删除操作可能会修改根节点,函数返回值是新的根节点,主函数中对应修改:insert(root, number2);改为root = insert(root, number2);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,提问作者이건웅
相关产品推荐
相关产品推荐

