2016-08-07 17 views
1

XCodeで指定された配列からC++経由でバイナリ検索ツリーを設定しようとしています。 次のようにBSTを生成するために再帰を使用しています。BSTにノードを挿入するときのEXC_BAD_ACCESS(EXC_i386_GPFLT)

int main(int argc, const char * argv[]) { 
    const int length = 19; 
     int data[length] = {1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20}; 
     Node* root = new Node(12); 

     for(int i = 0;i<length;i++){ 
      insert(data[i], &root); 
     } 
return 0; 
} 

、ここで私の挿入機能が

void insert(int key, Node **current) 
{ 
    if(*current == NULL) 
    { 
     Node *newnode = new Node(key); 
     *current = newnode; 
    } 
    else 
    { 
     if(key < (*current)->value) ---------EXCEPTION HERE 
      insert(key, &(*current)->left); 
     else 
      insert(key, &(*current)->right); 
    } 
} 

あり、時にはそれは例外EXC_BAD_ACCESS(コード= EXC_i386_GPFLT)をスローします。 Visual StudioでC#で同じロジックが正常に動作します。 C++のメモリに何か問題がありますか? 私はC++に精通していませんが、すべてがうまくいくようです。

+1

'Node'クラスの宣言と定義を示す必要があります。最も可能性の高い答えは、 'left'と' right'が 'nullptr'に明示的に初期化されていないことです。 –

+0

正確に!それは ノード(int _value){ 値= _値; } – taffarel

+0

あなたは答えとして書くことができます。 – taffarel

答えて

1

シャーロック・ホームズのアプローチをバグ・ハンティング(1)に適用した後、leftrightのクラスメンバーが明示的にnullptrに初期化されていない可能性が最も高い説明です。

(1)「不可能なものを取り除けば、残っているものは何でも、どうやら不可能でも、真実でなければなりません。」

関連する問題