2017-03-26 6 views
0

Ich mache derzeit einen Code einen Klassencode für binäre Suche Baum, aber ich bekomme einen Fehler im Destruktor für meine BST-Klasse. Das ist mein relevanter Teil des Codes:Binäre Suche Baum Destruktor Ausgabe

Knoten Struct:

struct Node{ 
    int key; 
    struct Node* left; 
    struct Node* right; 
}; 

Funktion neue Knoten zu erstellen:

Node* BST::CreateNode(int key){ 
    Node* temp_node = new Node(); 
    temp_node->key = key; 
    temp_node->left = nullptr; 
    temp_node->right = nullptr; 
    return temp_node; 
} 

Zuordnung Betreiber:

BST& BST::operator=(const BST& cpy_bst){ 
    if (this != &cpy_bst){ 
     Node* cpy_root = cpy_bst.root; 
     this->root=assgRec(cpy_root, this->root); 
    } 
    return *this; 
} 

Node* BST::assgRec(Node* src_root, Node* dest_root){ 
    if (src_root != nullptr){ 
     dest_root = CreateNode(src_root->key); 
     dest_root->left=assgRec(src_root->left, dest_root->left); 
     dest_root->right=assgRec(src_root->right, dest_root->right); 
    } 
    return src_root; 
} 

Destructor:

BST::~BST(){ 

    DestroyNode(root); 
} 

void BST::DestroyNode(Node* r){ 
     if (r != nullptr){ 
      DestroyNode(r->left); 
      DestroyNode(r->right); 
      delete r; 
     } 
    } 

Das Problem ist, dass, nachdem ich die Zuordnung in Hauptfunktion verwendet wird, wie:

BST bin_tree2 = bin_tree1;

Der Destruktor wird aufgerufen, aber nachdem er die Daten in bin_tree1 löscht, enthalten alle Werte, die in bin_tree2 abgelegt wurden, einige Junk-Werte und ich erhalte einen Fehler in diesem Teil. Jede Hilfe würde sehr geschätzt werden. Danke

+0

Was ist der Fehler? –

+0

Hallo! Dies: Unbehandelte Ausnahme bei 0x00FA49DC in DSAssg5.exe: 0xC0000005: Zugriffsverletzung lesen Speicherort 0xDDDDDDE1. – Hamza750

+0

Bitte geben Sie den Code für Ihre Knotenklasse an. – Lunar

Antwort

0

Das sieht aus wie Sie Zeiger kopieren und auf sie zugreifen, nachdem Speicher freigegeben wurde.

Das Problem scheint nicht mit den Schlüsseln zu sein, wie ich früher sagte, aber mit den Knoten, die in der BST :: assgRec-Funktion falsch konstruiert scheinen.

+0

Genau dieses Problem, aber wie genau bekomme ich es? Soweit ich weiß, kopiere ich nur den Wert des Schlüssels von src_root in den Schlüssel von dest_root. – Hamza750