私はAVL木のための2つの変数を格納するために必要されたプロジェクトがあります。それが使用されていることを言葉やレート:AVL木のためのCの文字列を格納する
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;
}
1で示すように、文字列をコピーする正しい方法は、strcpyのを使用することであるが、それは、実行エラーが発生します。
2を使用するとコードは機能しますが、各ノードの構造体のワードフィールドは同じアドレスで保存されます。つまり、すべてのノードのペーソ(使用率)は異なりますが、 (単語)は、ツリーに追加された最後の単語です。
この問題を解決する方法がわかりません。うまくいけば誰かがそれを修正する方法を知っているだろう。
ありがとうございました。
'a-> palavra = NULL; strcpy(a-> palavra、word); '悪いです。 'a-> palavra 'に割り当てられたメモリはありません。 'a-> palavra = strdup(word);'を提案してください。あなたは後で '自由(a-> palavra)'を行う責任があります。 –
"文字列をコピーする正しい方法はstrcpyを使用することです"はい、コピーします*どこに*?最初にコピーを保持するためのメモリが必要であり、それは(AVL)ツリー上で成長しません。 –
'a =(wordTree *)malloc(sizeof(wordTree)); 'を使うと文字列のメモリも割り当てられていると思っていましたが、今これを修正しました。 ありがとう –