以下是我的BST插入函数代码。有人可以解释为什么会出现分段错误吗?
#include <stdio.h>
#include <stdlib.h>
struct node{
int value;
struct node* right;
struct node* left;
};
struct node* insert(struct node* n,int age){
if (n==NULL){
n = malloc(sizeof(struct node));
n->value = age;
n->left = n->right = NULL;
}
else if(age < n->value){
n->left = insert(n->left, age);
}
else {
n->right = insert(n->right, age);
}
return n;
}
void main(){
int age;
struct node* n=NULL;
scanf("%d",&age);
while (age!=-1){
n=insert(n,age);
scanf("%d",&age);
}
}
我提到了this,它建议使用**(引用指针)。
f( &px );
//...
void f( int **px )
{
*px = malloc( sizeof( int ) );
printf( "*px = %p\n", *px );
}
但是为什么我们可以通过将返回类型从void
更改为node*
来避免使用**?
答案 0 :(得分:1)
这似乎对我有用。除了您使用scanf()
的方式之外,我没有做太多改动或您的代码,当您输入1
时,这并没有结束。
最好只调用scanf
一次,并确保允许使用while (scanf(.....) == 1
进行连续输入,以确保在终止之前始终读取一个值,在这种情况下,直到{{ 1}}是age
。
除非我遗漏了某些内容,否则这是建议的代码:
1