BST 中的分段错误(核心已转储)
Segmentation fault (core dumped) in BST
我已经检查了数百万次代码,但是这个错误不会出现,请帮助,它是用于创建二叉搜索树的程序...
我正在使用 VS Code 进行编译
typedef struct node node;
node *newNode(int key){
node *temp=(node *)malloc(sizeof(node));
temp->info=key;
temp->left=temp->right=NULL;
return temp; }
void inorder(node *root){
if(root!=NULL){
inorder(root->left);
printf("%d\t",root->info);
inorder(root->right); } }
node *Insert(node *root,int key){
if(root=NULL){ return newNode(key);}
if(key<root->info){
root->left = Insert(root->left,key); }
else if(key>root->info){
root->right = Insert(root->right,key); }
return root;
}
int main(){
int n,v;
node *root=NULL;
printf("enter the no of values you wanna enter");
scanf("%d",&n);
int i = 0;
while(i<=n){
scanf("%d\n",&v);
root=Insert(root,v);
i++;
}
inorder(root);
return 0;
}
正如 Jo Black 爵士和 dratenik 所说,该错误是行中的“assignment inside if”
if(root=NULL){ return newNode(key);}
这会将 NULL 分配给 root 并导致条件被视为假。因此,程序继续到下一行并尝试读取 root->info
,这是一个空指针取消引用并导致分段错误。
启用警告(并注意他们说的内容)是个好主意。要调试 memory-related 个错误,一个出色的工具是 AddressSanitizer (ASan)。有关如何安装和使用它的信息,请参阅 AddressSanitizer (ASan) for Windows with MSVC Visual Studio。
我已经检查了数百万次代码,但是这个错误不会出现,请帮助,它是用于创建二叉搜索树的程序... 我正在使用 VS Code 进行编译
typedef struct node node;
node *newNode(int key){
node *temp=(node *)malloc(sizeof(node));
temp->info=key;
temp->left=temp->right=NULL;
return temp; }
void inorder(node *root){
if(root!=NULL){
inorder(root->left);
printf("%d\t",root->info);
inorder(root->right); } }
node *Insert(node *root,int key){
if(root=NULL){ return newNode(key);}
if(key<root->info){
root->left = Insert(root->left,key); }
else if(key>root->info){
root->right = Insert(root->right,key); }
return root;
}
int main(){
int n,v;
node *root=NULL;
printf("enter the no of values you wanna enter");
scanf("%d",&n);
int i = 0;
while(i<=n){
scanf("%d\n",&v);
root=Insert(root,v);
i++;
}
inorder(root);
return 0;
}
正如 Jo Black 爵士和 dratenik 所说,该错误是行中的“assignment inside if”
if(root=NULL){ return newNode(key);}
这会将 NULL 分配给 root 并导致条件被视为假。因此,程序继续到下一行并尝试读取 root->info
,这是一个空指针取消引用并导致分段错误。
启用警告(并注意他们说的内容)是个好主意。要调试 memory-related 个错误,一个出色的工具是 AddressSanitizer (ASan)。有关如何安装和使用它的信息,请参阅 AddressSanitizer (ASan) for Windows with MSVC Visual Studio。