【发布时间】:2017-07-27 20:22:11
【问题描述】:
我有一个项目需要为 AVL 树存储两个变量:一个词和它的使用率:
struct AVLnodo {
float peso;
int FB;
char *palavra;
struct AVLnodo* esq;
struct AVLnodo* dir;
};
注意:
比索=使用率
palavra=word
其他变量是指向子元素和平衡因子的指针。
问题出在下面的代码中:
wordTree* InsereAVL (wordTree *a, float peso, char *word, int *ok)
{
if (a == NULL)
{
a = (wordTree*) malloc(sizeof(wordTree));
a->peso = peso;
a->palavra = NULL;
//1-----> strcpy(a->palavra,word);
//2-----> a->palavra=word;
a->esq = NULL;
a->dir = NULL;
a->FB = 0;
*ok = 1;
}
else
if (peso < a->peso)
{
...
}
else
{
...
}
return a;
}
复制字符串的正确方法是使用strcpy,如1所示,但是这样会导致执行错误。
当使用 2 时,代码有效,但每个节点的结构上的 word 字段存储在相同的地址,即所有节点在 peso(使用率)上具有不同的数字,但在 palavra 上具有相同的词( word),这是添加到树中的最后一个单词。
我不知道如何解决这个问题。希望有人知道如何解决它。
谢谢。
【问题讨论】:
-
a->palavra = NULL; strcpy(a->palavra,word);不好。没有分配给a->palavra的内存。建议a->palavra = strdup(word);。您稍后负责free(a->palavra)。 -
"复制字符串的正确方法是使用strcpy" 是的,但是复制它在哪里?您首先需要内存来保存副本,并且它不会在 (AVL) 树上生长。
-
我认为使用
a = (wordTree*) malloc(sizeof(wordTree));也会为字符串分配内存,现在确实解决了这个问题。谢谢 -
谁或什么文字建议转换
malloc()的结果? -
@LaposhasúAcsa 见Do I cast the result of malloc?。
标签: c string pointers avl-tree