Unaligned access pid...



  • Es gibt ein Menü, wo man sich verschiedene Punkte auswählen kann. Der eine Punkt geht zunächst, aber wenn eben "Baum_abbauen ( &root);" aufgerufen wird, erfolgt dann beim wiederholen Aufruf diese Fehlermeldung:

    Baum_abbauen ( &root); /* mit codezeiger root als Zeiger auf eine Baumstruktur */

    void Baum_abbauen( codezeiger *root_zz)
    {
    if (*root_zz != NULL)
    {
    Baum_abbauen (&(*root_zz)->lang);
    Baum_abbauen (&(*root_zz)->kurz);
    free (*root_zz);
    }

    } /* Baum_abbauen */

    Ist das Baumabbauen totaler Quatsch oder was hat diese Fehlermeldung zu sagen?



  • Welche Fehlermeldung?!



  • Oh, sorry... Also die, die alws Betreff steht:

    "Unaligned access pid..."

    anschliessend folgend noch eine Reihe von Zahlen und Buchstaben...



  • Noch einmal im Detail:

    Unaligned access pid=8564 <dateiname> va=0x14000234e pc=0x3ff8019df68 ra=0x3ff800d5984 inst=0xa42b0000
    Unaligned access pid=8564 <dateiname> va=0x14000234e pc=0x3ff8019df70 ra=0x3ff800d5984 inst=0xa60b0000



  • gib uns mal n paar infos

    was ist denn root?

    zweimal hintereinander abbauen aufrufen kann ja nicht gut gehen - das ist ja das selbe wie

    free(p);
    *p=foo;
    free(p);

    das kann ja nicht gehen...



  • Shade: man Baumrekursion

    Ich finde es an dem Code zwar ein wenig seltsam, dass du Zeiger auf Zeiger übergibst, anstatt einfach den Zeiger so wie er ist, aber abgesehen davon ist da kein Fehler drin. Machs doch mal testweise so:

    void Baum_abbauen(codezeiger root_zz) {
      if (root_zz) {
        Baum_abbauen(root_zz->lang);
        Baum_abbauen(root_zz->kurz);
        free(root_zz);
      }
    }
    

    PS wieso eigentlich lang und kurz statt links und rechts 😉



  • Warauf deutet denn die Fehlermeldung ungefähr hin (ich bin nahezu blutiger Anfänger...).

    Nähee Angaben zum Programm:

    typedef struct codesatz* codezeiger;

    struct codesatz
    {
    char kl*****rift;
    codezeiger kurz, lang;
    };

    Es gibt in einem Modul:
    codezeiger root = NULL;

    root = (struct codesatz*)malloc( sizeof( struct codesatz));

    Baum_aufbauen( &root) /* ein Baum wird aufgebaut */

    Baum_abbauen ( &root); /* Speicher wieder freigeben */

    Das ganze wird aus einem Menü aufgerufen. Das erste Mal funktioniert alles scheinbar. Ruft man den Menüpunkt ein weiteres Mal auf, so erscheint der o.g. Fehler. Wenn man die Zeile "Baum_abbauen ( &root);" rausnimmt geht es dann auch beim zweiten Mal.

    void Baum_abbauen( codezeiger *root_zz)
    {
    if (*root_zz != NULL)
    {
    Baum_abbauen (&(*root_zz)->lang);
    Baum_abbauen (&(*root_zz)->kurz);
    free (*root_zz);
    }
    } /* Baum_abbauen */



  • Original erstellt von Bashar:
    PS wieso eigentlich lang und kurz statt links und rechts 😉

    Das Programm soll zur Übersetzung von Morsecode in Klartext dienen. Und daher habe ich die Zeiger lang und kurz genannt...



  • ... und warum benutzt du dafür einen baum?



  • Ist doch gut dafür geeignet, oder nicht?


Anmelden zum Antworten