我有一個需要存儲兩個變量的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));'會爲該字符串分配內存,現在確實解決了這個問題。 謝謝 –