Я продолжаю получать ошибку ошибки сегментации, когда я вызываю функцию find_word в своей основной. Когда добавлено слово Я хочу вернуть 1, и когда он найдет это слово, я хочу, чтобы оно вернулось 1. Так что я также не уверен, что мой метод вставки тоже правильный.Ошибка сбоя сегментации в BST
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
struct node {
char *word;
struct node *left;
struct node *right;
};
static struct node *root;
int init(void)
{
struct node *new_node = malloc (sizeof(struct node));
if(new_node==NULL){
return 0;
}
else{
root = new_node;
new_node->left = NULL;
new_node->right = NULL;
return 1;
}
}
static int insert(struct node *newnode, char *word)
{
struct node *temp = NULL;
if(!(newnode))
{
temp = (struct node *)malloc(sizeof(struct node));
temp->left =NULL;
temp->right = NULL;
temp->word = word;
newnode = temp;
return 0;
}
if(word < (newnode)->word)
{
insert((newnode)->left, word);
}
else if(word > (newnode)->word)
{
insert((newnode)->right, word);
}
return 1;
}
int add_word(char *word)
{
return insert(root,word);
}
static int find(char *word, struct node *newnode){
if(newnode==NULL){
return 0;
}
else if(strcmp(word,newnode->word)>0){
find(word,newnode->left);
}
else if(strcmp(newnode->word,word)<0){
find(word,newnode->right);
}
else{
return 1;
}
return 0;
}
int find_word(char *word)
{
return find(word,root);
}
int main(int argc,char *argv[])
{
int k;
char l[5];
k = init();
printf("init: %d\n",k);
strcpy(l,"x");
k = add_word(l);
printf("add_word(%s): %d\n",l,k);
strcpy(l,"x");
k = find_word(l);
printf("find_word(%s): %d\n",l,k);
return 0;
}
'insert' использовать' strcmp' для сравнения '' слово' с newnode-> слово', а не '' <' and '>. – Barmar
@Barmar Я изменил его, так что теперь его 'strcmp (word, newnode-> word)> 0' и' strcmp (word, newnode-> word) <0' в 'insert', но я все еще получаю ошибку сегментации. – Mark
Разве вы не опубликовали аналогичный вопрос ранее? Похоже, он был удален, потому что я не могу его найти сейчас. Как я и предложил, запустите свой код под отладчиком, чтобы вы могли видеть, какие переменные недействительны при возникновении ошибки. – Barmar