0
因此,我正在做一个大学班级的作业,其目标是构建一个字符串BST,用于读取文本,将它分开并在树中插入每个单词。BST字符串中的分段错误
但是,当我尝试插入一个词(手动)时,我遇到了分段错误,你们能告诉我我做错了什么地方,并提出修复建议吗?
/* Structure for the node */
typedef struct node {
char *key;
int multi;
struct node *left, *right;
} node;
node *root;
void Insert(char *x, node *p){
p = root;
/* if the pointer points to null, create a new node and insert the key */
if (*p == NULL){
(*p) = (node)malloc(sizeof(node))
(*p)->key = strcpy((*p)->key, x);
(*p)->left = NULL;
(*p)->right = NULL;
return;
}
else if (strcasecmp(x, p->key) < 0)
{
Insert(x, &p->left);
return;
}
else if (strcasecmp(x, p->key) > 0)
{
Insert(x, &p->right);
return;
}
/* if the words are equal, add 1 to the multi (how many times the word appears */
else
(*p)->multi = multi + 1;
}
这甚至不应该编译!当你将'p'声明为你不能做的指针时,例如'(* p) - > key ...'然后稍后再正确使用它,例如'对 - > key'。 –
另外,为什么传入'p'作为参数并直接重新指派它以指向'root'? –
这段代码坦率地说是一个未定义行为的山峰。从'malloc()'强制转换为一种甚至不是指针类型的类型(**不必要的**)是唯一能够避免编译失败的事情。它迅速从那里下山。 – WhozCraig