Anzeige:
Ergebnis 1 bis 4 von 4

Thema: [C++] Stingvariablen in einer Listenstruktur

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.07.2003
    Beiträge
    23

    [C++] Stingvariablen in einer Listenstruktur

    Hi!

    Ich hab mal wieder ne Frage:

    Code:
    #include <iostream>
    #include <string>
    using namespace std;
    
    struct ListEntry
    {
       	public:
       	string name;
    	string vorname;
    	ListEntry *next;
    };
    
    struct ListEntry *next = NULL;
    struct ListEntry *anfang = NULL;
    
    void AddEntry (string namein, string vornamein)
    {
    	struct ListEntry *zeiger;
    	
    	//Prüfen ob bereits eine Liste angefangen wurde
    	if(anfang == NULL)
    	{
    		//Speicher für ein Element reservieren
    		if((anfang = (struct ListEntry *)malloc(sizeof(struct ListEntry)*20)) == NULL)
    			cout << "Kein Speicher verfuegbar!" << endl;
    			
    		anfang->name = namein;
    		anfang->vorname = vornamein;
    		anfang->next=NULL;
    	}
    	else
    	{
    		zeiger=anfang;
    		while(zeiger->next != NULL)
    			zeiger=zeiger->next;
    		
    		if((zeiger->next = (struct ListEntry *)malloc(sizeof(struct ListEntry))) == NULL)
    			cout << "Kein Speicher verfuegbar!" << endl;
    			
    		zeiger=zeiger->next;
    		
    		zeiger->name = namein;
    		zeiger->vorname = vornamein;
    
    		zeiger->next = NULL;
    	}
    }
    Das Problem:
    Die Strings im Struct 'ListEntry' können nicht gefüllt werden. Das Programm produziert Segfaults wenn er auf die Variablen schreiben will.
    Ich glaube das Problem liegt darin das mit malloc nicht genug speicher reserviert wird bzw. dieses ein Problem mit den Strings hat, da diese ja dynamisch vergrößert bzw. verkleinert werden.

    Wie bekomm ich das nun hin den Speicher für ein Listenelement so zu allozieieren das ich auf die Strings problemlos schreiben kann?

    PS: wenn ich den typ 'int' verwende geht alles so wie ich es will. Aber ich brauche ja Strings.

    Grüße Markus

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Ui ui ui, oh...

    Du kannst nur für sogennante PODs speicher per malloc allozieren und dann zum Beispiel mit memcpy initialisieren. Dein struct ListEntry is aber keins dieser PODs.
    Deshalb muß ein Konstruktor zur Initalisierung gerufen werden. Das kannst du kurz gesagt dadurch erreichen das du per "new" ein Objekt des Typs ListEntry erzeugst. Das liegt dann am nächsten dran an dem was du bereits hast.
    Es wäre aber vorraussichtlich viel besser, wenn du std::list verwenden würdest anstatt einer handgebastetelten List.

    Aber du solltest in jedem Fall unbedingt etwas zu C++ nachlesen. Man könnte nämlich noch durchaus mehr in deimen Code als Fehler ansehen.

  3. #3
    hotzenplotz
    Gast
    Du programmierst C++! Also vergiss malloc. Pack deinen ListEntry in eine Klasse und verwende new, um Speicher zu reservieren.

    mfg, martin

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Falls du nicht gerade zur Übung diese Liste implementierst, wäre es vernünftiger die Standard list zu benutzen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •