gpt4 book ai didi

c - 根指针移动到指向二叉搜索树中插入的单词

转载 作者:行者123 更新时间:2023-11-30 17:44:10 25 4
gpt4 key购买 nike

所以我编写了一个程序来从文件中读取单词并在二叉搜索树中插入、删除或搜索它们。似乎一切都工作正常,但不知何故,当在二叉搜索树中插入单词时,从第二个单词开始,我作为插入函数的参数传递的根指针被移动到指向正在插入的单词。因此,该函数不会插入单词,只会增加第一个单词的出现次数。我真的不知道这是怎么发生的。有谁知道可能是什么问题吗?

我的结构:

    typedef char * TypeKey;
typedef struct TypeItem {
TypeKey Key; //[MAXTAM];
int counting;
} TypeItem;

typedef struct Node * Pointer

typedef struct Node {
TypeItem Reg;
Pointer Left, Right;
} node;

typedef Pointer TypeTree;

插入函数:

   void Insert (TypeItem * x, Pointer * p){


if (*p == NULL){
*p= (Pointer)malloc(sizeof(Node));
(*p)->Reg = *x;
(*p)->Left = NULL;
(*p)->Right = NULL;
printf("insert %s\n",x->Key);
return;
}

if (strcmp(x->Key,(*p)->Reg.Key)< 0){
Insert(x, &(*p)->Left);

}
if (strcmp(x->Key,(*p)->Reg.Key) > 0)
Insert(x, &(*p)->Right);

else {
(*p)->Reg.counting ++;
printf("increases %s\n",x->Key);
return;
}
}

我只是在 main 上声明根指针“arvore”,如下所示:

    Pointer arvore = NULL;

TypeItem item;
item.Key = Palavra;
item.counting = 1;

Insert(&item, arvore);

如果有人能帮助我理解问题所在,那就太好了。

最佳答案

您的代码中有未定义的行为

首先,声明 Apontador 类型的 arvore,然后将 NULL 赋给该指针。然后,您以 arvore 作为参数调用 Insere,但 Insere 想要一个指向 Apontador 的指针 code>,这意味着您在调用中只有一级间接访问。这甚至不应该编译,或者至少给出警告(警告是一个很好的迹象,表明您正在做一些不应该做的事情)。

当在 Insere 函数内部时,您取消引用指针 p(调用中的 arvore),该指针为 NULL ,导致未定义的行为。

您还应该使用地址运算符 & 作为第二个参数来调用该函数:

Insere(&item, &arvore);
<小时/>

此外,如果 Palavra 是指向例如的指针在函数中本地定义的数组,一旦函数返回,该指针将不再有效。如果是这样,那么您还有另一种未定义行为的情况。

关于c - 根指针移动到指向二叉搜索树中插入的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com