我創建了兩個結構尖銳的數據不斷消失
typedef struct node
{
struct node* left;
struct node* right;
int data;
} node;
typedef struct head
{
int count;
struct node* root;
} head;
,這裏是我試圖使用將數據插入到一棵樹的功能之外吧。
int insert(struct node* root, int value)
{
node* newnode =(node*)malloc(sizeof(node));
newnode->data=value;
newnode->left=NULL;
newnode->right=NULL;
if(root==NULL)
{
root=newnode;
return 1;
}
if(value<root->data)
{
if(root->left==NULL)
{
root->left=newnode;
return 1;
}
else
{
return insert(root->left,value);
}
}
else if(value==root->data)
{
printf("data already exist\n");
free(newnode);
return 0;
}
else
{
if(root->right==NULL)
{
root->right=newnode;
return 1;
}
else
{
return insert(root->right,value);
}
}
}
,當我操作
head* BSThead=(head*)malloc(sizeof(head));
insert(BSThead->root,10);
我可以看到,插入功能成功地進入第一和如果操作線根= newnode,和我可以看到,它已給出的地址。
但是當這個函數結束時,我回到主函數來通過 來訪問它printf(「%d」,BSThead-> root);
這行只是打印0,我認爲這意味着BST-> root目前爲空。
據我所知,由malloc函數創建的數據具有與正常值不同的功能範圍。所以我認爲雖然newnode是在插入函數中創建的,但是在插入函數結束時不會像正常變量一樣被銷燬,因此我可以在程序運行時隨時使用它。
你可能需要傳遞指向該函數根節點指針的指針。或者你可以從函數返回新的根節點指針。對於具有相同基本診斷的SO,存在很多問題。但是,您還會將未經檢查的未初始化數據從'malloc()'傳遞給函數,這也可能導致很多麻煩。 –