Doppelt verkettete Liste; Kleines Problem beim Einlesen = große Fehlerwirkung?!



  • Hi,

    das Problem liegt in Deiner Liste selber. Insbesondere bei AddPerson:

    void AddPerson(char *vorname, char *name, char *alter, char *telefonnummer)
    {
      if(personavaiable)
      {
    	Person *Object;
    	Object = new Person;
        Object->vorname = vorname;
    	Object->name = name;
    	Object->alter = alter;
    	Object->telefonnummer = telefonnummer;
    	Object->pPrevPerson = pCurrentPerson;
    	Object->pNextPerson = NULL;
    
    	pCurrentPerson->pNextPerson = Object;
    	pCurrentPerson = Object;
    	ReadPerson();
      }
      else
      InitList(vorname,name,alter,telefonnummer);
    }
    

    Du kannst C-Strings nicht einfach nur mit = Zuweisen. In Deiner Funktion kopierst Du nur Adresse auf die Arrays in ReadList sprich:

    char vorname[80], name[80], alter[80], telefonnummer[80];
    

    der Inhalt der Variablen ändert sich dann aber in dem nächsten Schleifendurchlauf.
    Ein kleiner Tipp, wenn Du Dich schon mit Klassen beschäftigt hast, dann Kapsel die Liste doch in eine Klasse. das macht den Code übersichtlicher. So wie er jetzt ist, sieht man ja kaum durch.

    grüße Con@n



  • Ich weiß das es immer schwer ist fremden Code zu blicken.
    Aber du hast Recht, jetzt sehe ich den Fehler allerdings weiß ich nicht wie ich das umgehen kann.
    Als erstes werde ich mir jetzt wohl erstmal Klassen anschauen.

    Hast du evt. noch eine Idee wie ich es erstmal so zum laufen bekommen könnte?



  • wenn Du die Zeichenketten kopieren willst, dann mit strcpy aus der <cstring>. Also statt

    ziel=quelle
    
    strcpy(ziel,quelle)
    

    dann darfst Du aber nicht vergessen, vorher mit new genügend Speicher bereitzustellen.

    grüße Con@n



  • Dann bräuchte ich noch einmal deine Hilfe 🙂

    In C geht das so:

    Person *Object;
    	Object =  malloc (sizeof(*Object));
    	Object->vorname  =  malloc (strlen(vorname));
    	strcpy(Object->vorname, vorname);
    

    aber warum geht das in c++ dann nicht einfach so?

    Person *Object;
    	Object = new (sizeof(*Object));
    	Object->vorname = new (strlen(vorname));
        strcpy(Object->vorname, vorname);
    

    😕



  • new ist da etwas anders als malloc

    Person *Object = new Person; 
      Object->vorname = new char[strlen(vorname)+1] // +1 muss sein, wegen dem abschließendem Nullzeichen;
    

    grüße Con@n





  • alter ich könnte dich totknuddeln 😃
    Es klappt! Ich fass es nicht! Wenn ich noch ein paar Fragen haben sollte melde ich mich einfach wieder ! Super Hilfe ! 😋



  • Ja, habe ich!

    Allerdings müsste ich mein Programm komplett umstrukturieren und das wollte ich doch nicht!

    Aber auf einige gute Ideen hast du mich damit gebracht!



  • Ich erwähne es lieber noch einmal:

    Die Hilfe von euch beiden war echt super, ich will euch ermutigen weiter so gute, qualifizierte Hilfe zu leisten! 😋 Schöne arbeit jungs!



  • Der beste Dank ist wenn Du Dich registrierst und ebenfalls mit Deinem Wissen anderen hilfst 🤡



  • Aber das mit dem Knuddeln sollten wir verschieben. Du kannst ja mal Deine Freundin vorbeischicken 😃 😃 😃 😃 😃 . zum knuddeln

    grüße Con@n


Anmelden zum Antworten