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 entfernen

    Die 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.


Anmelden zum Antworten