2016-12-11 6 views
0

作成した一時ノードの値にアクセスしようとすると、バイナリ検索ツリーが作成されて例外が発生します。例外は、例外がスローされたことを示します:読み取りアクセス違反。 tempはnullptrでした。この例外のハンドラがある場合は、プログラムを安全に継続することができます。このエラーは、挿入関数内の最初のif文で発生します。バイナリ検索ツリーを作成しようとすると、読み取りアクセス違反例外が発生しました。一時的にnullptrでした。

#ifndef BINARYSEARCHTREE_H 
#define BINARYSEARCHTREE_H 
#include <iostream> 
#include <stdlib.h> 
using namespace std; 

template<class T> 
class BinarySearchTree { 
public: 
//Default Constructor 
BinarySearchTree() { 
    root = NULL; 
} 

//Constructor with root value 
BinarySearchTree(const T& rootItem) { 
    root->value = rootItem; 
    root->left = NULL; 
    root->right = NULL; 
} 

void insert(const T& item) { 
    Node<T> * temp = root; 
    bool loop = false; 

    while (loop == false) { 
     if (temp->value > item) { 
      temp = temp->getLeftChild(); 
     } 
     else if (temp->value < item) { 
      temp = temp->getRightChild(); 
     } 
     else if (temp->value == item) { 
      temp = temp->getRightChild(); 
     } 
     else { 
      temp->value = item; 
      loop = true; 
     } 
    } 
} 

private: 
    Node<T> * root = new Node<T>; 
}; 

#endif 
+0

は、 'ノード *ルート=新しいノード;'のためにコンパイルされたコードですか? –

+0

これは、挿入機能まですべて実行されます。 – laneherby

答えて

0

あなたが最初のデフォルトコンストラクタでツリーを作成すると、rootNULLです。したがって、何かを挿入しようとすると、tempもnullになり、アクセス違反が発生します。

+0

それをヌルにしないためには、それをヌル値のように与えるためにルートと何をしなければならないのですか? – laneherby

+0

それがヌルであるかどうかを確認してください。挿入されている場合は、ルートを適切な値の新しいノードに設定するだけです。 – Iluvatar

+0

私は何かを挿入するためにルートを過ぎても同じエラーが表示されます。 – laneherby

関連する問題