我有一个需要存储两个变量的AVL树的一个项目:一个字和速度,它被用于:存储在C字符串AVL树
struct AVLnodo {
float peso;
int FB;
char *palavra;
struct AVLnodo* esq;
struct AVLnodo* dir;
};
注:
比索=使用的速率
palavra =字
其他变量是指向儿童和因素的平衡。
的问题是在下面的代码:
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时,代码有效,但每个节点的结构中的字段存储的地址相同,即所有节点的peso(使用率)都有不同的数字,但palavra上的同一个字(单词),这是添加到树中的最后一个单词。
我不知道如何解决这个问题。希望有人会知道如何解决它。
谢谢。
'a-> palavra = NULL; strcpy(a-> palavra,单词);'不好。没有内存分配给'a-> palavra'。建议'a-> palavra = strdup(word);'。你有责任在以后免费(a-> palavra)。 –
“复制字符串的正确方法是使用strcpy”是的,但复制它*其中*?您需要内存来保留副本,并且它不会在(AVL)树上增长。 –
我认为使用'a =(wordTree *)malloc(sizeof(wordTree));'会为该字符串分配内存,现在确实解决了这个问题。 谢谢 –