簡體   English   中英

二進制搜索樹插入會引發分段錯誤

[英]Binary Search Tree Insertion throws segmentation Fault

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

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);
}

你必須包括stdlib.h

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

演員隱藏相應的警告。

正如我所看到的,有兩種可能性可能導致崩潰:

  • 正如@undur_gongor所指出的那樣,你不是要包含stdlib.h ,而是運行一個不同大小和指針大小的體系結構。 這完全符合您不應該轉換malloc結果的原因

  • 你失去了記憶。 由於您沒有檢查malloc的結果,因此它可能已失敗並返回NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM