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