2017-03-26 2 views
0

現在、バイナリ検索ツリーのクラスコードを作成していますが、BSTクラスのデストラクタでエラーが発生しています。バイナリ検索ツリーデストラクタの問題

ノードのStruct::

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

代入演算子:

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

デストラクタ:

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

機能は、新しいノードを作成するには、このコードの私の関連する部分であります

BST::~BST(){ 

    DestroyNode(root); 
} 

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

問題は、main関数で代入を使用した後、次のようになります。

BST bin_tree2 = bin_tree1;

デストラクタは呼び出されますが、bin_tree1のデータを削除した後、bin_tree2に配置されたすべての値にいくつかのジャンク値があり、その部分にエラーが発生します。どんな助けでも大歓迎です。ありがとう

+0

エラーは何ですか? –

+0

こんにちは!これは、DSAssg5.exeの0x00FA49DCで未処理の例外が発生しました。0xC0000005:0xDDDDDDE1の場所を読み取っているアクセス違反。 – Hamza750

+0

Nodeクラスのコードを入力してください。 – Lunar

答えて

0

これは、ポインタがメモリを割り当て解除された後にコピーしているようです。

私が以前に言ったように、問題はキーではないようですが、BST :: assgRec関数で不適切に構築されているようなノードがあります。

+0

それはまさにその問題ですが、正確にどのようになっていますか?私が知る限り、私はsrc_rootのキーの値をdest_rootのキーにコピーしています。 – Hamza750