-1
J'ai écrit l'arbre de recherche binaire par langage C, lequel est une chaîne de caractères, et j'ai un problème lorsque j'ai essayé de taper des données.Thread 1: EXC_BAD_ACCESS
Erreur d'affichage sur la ligne 14, je pense que root->data
est NULL cause, mais je ne sais pas comment résoudre.
Ceci est mon code:
#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;
}
Depuis 'root' est toujours nulle à ce moment-là, vous avez besoin de mettre' 'root' à tmp', ou - mieux - se débarrasser de 'tmp' et assigner le résultat de' malloc() 'à' root' à la place. Ou, de manière équivalente, changez 'root-> data' en' tmp-> data' puisque vous renvoyez actuellement 'tmp'. Vous devriez également vérifier que le 'malloc()' a réussi, bien sûr. Notez que les opérateurs point '.' et flèche' -> 'se lient très étroitement; ils ne devraient pas être écrits avec des espaces autour d'eux. Votre code ne définit pas 'parent'. Vous devrez faire une copie de la chaîne - voir ['strdup()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html). –