以下是我爲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