簡體   English   中英

為什么我的代碼中出現分段錯誤?

[英]Why am I getting Segmentation fault in my code?

    Node* findMax(Node* root){
        Node* m=root;
        while(m!=NULL && m->right!=NULL){
            m=m->right;
        }
        return m;
    }
    // Returns the root of the modified BST after deleting the node with value X
    Node *deleteNode(Node *root,  int X)
    {
        Node *temp;
        if(!root)return NULL;
        else if(X<root->data)root->left=deleteNode(root->left,X);
        else if(X>root->data)root->right=deleteNode(root->right,X);
        else if(X==root->data){
            //data found
            if(root->left && root->right){//internal node to be deleted
                temp=findMax(root->left);//inorder predecessor
                root->data=temp->data;//replace by inorder predecessor
                root->left=deleteNode(root->left,root->data);//delete the duplicate left in left subtree
            }
            else{//node to be deleted is either leaf or has one child
                temp=root;
                if(root->left==NULL){  
                    root=root->right;
                }
                if(root->right==NULL){         
                    root=root->left;
                }
                free(temp);
            }
        }
        return root;
    }
    
       

我找不到這段代碼有什么問題:為什么會引發分段錯誤?

在這部分

                if(root->left==NULL){  
                    root=root->right;
                }
                if(root->right==NULL){         
                    root=root->left;
                }

root->left == NULL為真時, root=root->right; 被執行。
由於前面if語句的條件, root->right在這里是NULL然后root設置為NULL
然后,評估root->right==NULL並取消引用root ( NULL )。 這將導致分段錯誤。

為了解決這個問題,當root->left!=NULL時,第二個條件總是為真,所以它應該被替換為else並讓它只執行其中一個。

                if(root->left==NULL){  
                    root=root->right;
                }
                else{         
                    root=root->left;
                }

暫無
暫無

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

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