2015-12-18 96 views
4

有人可以請解釋下面的二進制搜索插入代碼有什麼問題嗎?當我嘗試插入第二個元素時,它給出了分段錯誤。二叉搜索樹插入引發分段錯誤

node * insert(node * root, int value) 
{ 
    if(root == NULL){ 
     node *newnode = (node *)malloc(sizeof(node)); 
     newnode->data = value; 
     newnode->left = NULL; 
     newnode->right = NULL; 
     root = newnode; 
    } 
    else{ 
     if(root->data > value) 
      insert(root->left, value); 

     if(root->data < value) 
      insert(root->right, value); 
    } 
    return root; 
} 

int main(){ 
    node* root = NULL; 
    root = insert(root, 5); 
    root = insert(root, 10); 
} 
+0

您好,歡迎StackOverflow上。請添加您的節點類型的聲明。你確定在main()函數中修改了根值嗎? – philant

+0

你爲什麼要回歸根? – BlueMoon93

+1

@ BlueMoon93:因爲這是如何修改? –

回答

1

你必須包括stdlib.h

否則,編譯器不知道malloc的原型,並假定它返回的是int而不是指針。如果您的ABI以不同方式處理指針和整數,則會導致問題。

相應的警告被隱藏。

1

在我看來,還有就是爲什麼這可能會崩潰兩種可能性:

  • 爲@undur_gongor已經指出的那樣,你不包括stdlib.h正在和一個架構,不同尺寸的整數運行和指針。這將完全符合原因why you shouldn't cast the result of malloc

  • 你內存不足。既然你不檢查的malloc結果可能已經失敗,返回NULL