以下是我为BST插入函数编写的代码。有人可以解释为什么这给出了分段错误?在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*
返回类型?
'insert'老是死机。你的编译器不会为此提出警告吗? – melpomene
'main'应该返回'int',而不是'void'。 – melpomene
你缺少'#include'和'#include '。 –
melpomene