Ich habe ein Projekt, das zwei Variablen für einen AVL-Baum zu speichern benötigt wird: ein Wort und die Geschwindigkeit, dass es verwendet wird:eine Zeichenfolge in C für einen AVL-Baum speichert
struct AVLnodo {
float peso;
int FB;
char *palavra;
struct AVLnodo* esq;
struct AVLnodo* dir;
};
Hinweis:
Peso = Nutzungsrate
palavra = Wort
andere Variablen sind Hinweise auf das Gleichgewicht zwischen Kind und Faktor.
Das Problem ist in dem folgenden Code:
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;
}
Der richtige Weg, um die Zeichenfolge zu kopieren ist, um die strcpy zu verwenden, wie durch 1 gezeigt wird, sondern dass in einem Ausführungsfehler resultiert.
Bei Verwendung von 2 funktioniert der Code, aber das Wortfeld auf der Struktur jedes Knotens wird mit der gleichen Adresse gespeichert, dh alle Knoten haben eine andere Nummer auf Peso (Rate of Use), aber dasselbe Wort auf Palavra (Wort), welches das letzte dem Baum hinzugefügte Wort ist.
Ich bin mir nicht sicher, wie man dieses Problem löst. Hoffentlich weiß jemand, wie man es repariert.
Danke.
'a-> palavra = NULL; strcpy (a-> palavra, Wort); 'ist schlecht. Es ist kein Speicher für "a-> palavra" reserviert. Schlage 'a-> palavra = strdup (Wort);'. Sie sind dafür verantwortlich, später "a-> palavra" frei zu geben. –
"Der richtige Weg, um die Zeichenfolge zu kopieren, ist die Verwendung der strcpy" Ja, aber kopieren Sie es * wo *? Sie benötigen Speicher, um die Kopie zuerst zu behalten, und sie wächst nicht auf (AVL) -Bäumen. –
Ich dachte, dass die Verwendung von 'a = (wordTree *) malloc (sizeof (wordTree));' Speicher für die Zeichenfolge ebenfalls zuweisen würde, hat dies jetzt behoben. Thanks –