gpt4 book ai didi

c - c BST 中的段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 18:19:00 26 4
gpt4 key购买 nike

这里我制作了一个在二叉搜索树(BST)中删除的程序,但是在执行时出现段错误(核心转储),我认为它在删除函数中,但不知道我是否删除了删除函数的函数调用然后就可以正常工作了,比如求最大元素,中序遍历,但是删除不行。

#include<stdio.h>
#include<stdlib.h>
struct BST{
int data;
struct BST *left;
struct BST *right;
};
struct BST *newNode(int data){
struct BST *temp = (struct BST *)malloc(sizeof(struct BST));
temp->data=data;
temp->left=0;
temp->right=0;
return temp;
}
void inOrder(struct BST *root){
if(root==0)
return;
inOrder(root->left);
printf("%d",root->data);
inOrder(root->right);
}
struct BST *findMax(struct BST *root){
if(root==0)
return 0;
if(root->right!=0)
return findMax(root->right);
return root;
}
struct BST *dele(struct BST *root,int data){
if(root==0)
return 0;
if(data<root->data)
root->left=dele(root->left,data);
if(data>root->data)
root->right=dele(root->right,data);
else{
if(root->left && root->right)
{
struct BST *temp=findMax(root->left);
root->data=temp->data;
root->left=dele(root->left,root->data);
}
else{
struct BST *temp=root;
if(root->left==0)
root=root->right;
if(root->right==0)
root=root->left;
free(temp);
return root;
}
}
return root;
}
void main(){
struct BST *root = (struct BST*)malloc(sizeof(struct BST));
root=newNode(1);
root->left=newNode(2);
root->right=newNode(3);
root->left->left= newNode(4);
root->left->right=newNode(5);
root->right->left=newNode(6);
root->right->right=newNode(7);
inOrder(root);
root=dele(root,1);
printf("\n\n");
inOrder(root);
}

最佳答案

void main(){

请更改为:

int main(void) {

并使用NULL而不是0来比较指针

我的调试器告诉我:

Program received signal SIGSEGV, Segmentation fault. 0x00000000004007f0 in delete (root=0x0, data=5) at demo.c:47 47
if(root->right==0)

调试步骤(使用gdb):

  • 使用 -g 标志编译:

    gcc -std=c99 -pedantic -Wall -Wextra -W -g -o demo demo.c

  • 启动 gdb:

    gdb 演示

  • 类型:

    运行

关于c - c BST 中的段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24630301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com