Huffman Code Implementierung
-
Hey ho,
Ich wollte den Quellcode von dieser Seite http://old.informatik-ag.net/content/huffman-code-3-den-baum-erstellen testen.
Doch bekomme ich beim ausführen ständig die Fehlermeldung :
"Unbehandelte Ausnahme bei 0x00414d50 in Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000."
Und das immer an folgender Stelle:
//Baum bauen!
---> while(root->nextCharacter != NULL) <---
{
//die zwei seltensten Zeichen finden
listElement *minimum1 = NULL;
listElement *minimum2 = NULL;
...Weiß irgendjemand rat?
lg
Fred
-
Da hast du vermutlich vergessen, den Zeiger
root
zu initialisieren.
-
Der Code sieht gut aus. Wo zeigt
root->nextCharacter
denn hin?
-
EOutOfResources schrieb:
Der Code sieht gut aus. Wo zeigt
root->nextCharacter
denn hin?mmh gute Frage, kann ich dem Text auch nicht entnehmen. Mag nicht jemand mal den Quellcode bei sich testen?
"Den Baum erstellen
Nachdem wir nun unsere Liste haben, müssen wir jetzt wie in Teil 1 erklärt wurde, solange die zwei seltensten Zeichen zu einem Knoten zusammenfassen, bis wir nur noch einen Knoten in der Liste haben. Dafür müssen wir verschiedene Aufgaben lösen und solange ausführen, bis nur noch ein Element in der Liste ist:
die kleinste und zweitkleinste Häufigkeit eines Zeichens finden
die beiden in einen Baum zusammenfassen
den neuen (zusammengefassten) Baum in die Liste einreihen
die zwei Zeichen aus der Liste entfernenDie zwei Zeichen müssen wir entfernen, weil diese sich in dem Baum als Unterzeichen befinden und somit doppelt vorkommen würden, wenn wir sie nicht entfernen (Endlosschleife). Die Liste wird also mit jeder Iteration (Schleifendurchlauf) um 1 kleiner, bis sie die Größe 1 hat. Das ist dann unser Baum, der die Kodierung enthält!
Wir brauchen also eine Schleife, die solange die oben genannten Aufgaben löst, bis nur noch ein Element in der Liste ist (root->nextCharacter ist dann NULL). Das gibt uns schonmal ein Rahmenwerk:
Quelltext:
//Baum bauen!
while(root->nextCharacter != NULL)
{
//die kleinste und zweitkleinste Häufigkeit eines Zeichens finden//die beiden in einen Baum zusammenfassen
//den neuen (zusammengefassten) Baum in die Liste einreihen
//die zwei Zeichen aus der Liste entfernen
}"
-
Hast du den Code auch von oben nach unten abgearbeitet? Vor dem Abschnitt "Den Baum erstellen" kommt eine Erklärung wie man die Buchstaben in eine Liste einordnen soll.
PS: Ich war mal so frei, den Link von dir in ein url-Tag zu gießen, die cpp-Tags findest du beim nächsten Mal bitte selber.