2017-06-17 12 views
-1

C言語でバイナリ検索ツリーを書きましたが、データは文字列です。データを入力しようとすると問題があります。スレッド1:EXC_BAD_ACCESS

エラー14行目で、私はroot->dataがNULLであると考えていますが、解決方法はわかりません。

これは私のコードです:あなたの関数で

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
struct Node { 
    Node *parent; 
    Node *left; 
    Node *right; 
    char *data; 
}; 
Node *insert(Node *root, char *data) { 
    if (root == NULL) { 
     Node *tmp; 
     tmp = (Node *)malloc(sizeof(Node)); 
     root->data = data; // <--- Line 14 
     tmp -> left = tmp -> right = NULL; 
     return tmp; 
    } 
    if (strcmp(data, root->data) > 0) { 
     root -> right = insert(root->right, data); 
    } else if (strcmp(data, root->data) < 0) { 
     root -> left = insert(root->left, data); 
    } 
    return root; 
} 

void Print(Node *root){ 
    if (root == NULL) return; 
    Print(root->left); 
    printf("%s\n", root->data); 
    Print(root->right); 
} 

int main() { 
    Node *root = NULL; 
    char input[21]; 
    while (scanf("%s", input) != EOF) { 
     root = insert(root, input); 
    } 
    Print(root); 
    return 0; 
} 
+0

、あなたがtmp''に 'root'を設定する必要があり、または - より良い - 'tmp'を取り除き、代わりに' malloc() 'の結果を' root'に代入してください。同様に、現在 'tmp'を返すので、' root-> data'を 'tmp-> data'に変更します。もちろん、 'malloc()'が成功したことを確認してください。ドット '.'と矢印' - 'の演算子は非常に緊密に束縛されていることに注意してください。彼らの周りにスペースを入れてはいけません。あなたのコードは 'parent'を設定しません。文字列のコピーを作成する必要があります - ['strdup()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html)を参照してください。 –

答えて

1

:root`は、その時点ではまだnullである `ので

Node *insert(Node *root, char *data) { 
    if (root == NULL) { 
     Node *tmp;   // is this really needed? 
     tmp = (Node *)malloc(sizeof(Node)); // did your mean root = malloc(..) ? 
     root->data = data; // <--- root is always NULL, from test above 

/* ... */ 
関連する問題