Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speichefehler bei Listen!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.12.2004, 11:52 Uhr
enrico



Hallo habe folgendes Problem, in meiner Liste bekomme ich wenn ich Werte aus dem 1. Listenelement übergeben bzw. zuweisen will jedesmal einen Speicherfehler. Ausserdem hab ich Probleme(ebenfalls Speicherfehler) beim Löschen des ersten Listenelements, ich hab keine Ahnung woran das liegt.

Hier die Klassendefinition der Liste:


C++:
class AList{                // Definition der Aktivitaeten Listenklasse

private:

    Aktivitaet* firsta;                // Anfang der List
    Aktivitaet* lasta;                // Ende der List

public:

    AList(){firsta=lasta=NULL;}     // Konstruktor
    ~AList(void){}                    // Destruktor

    Aktivitaet* front() const{return firsta;} // Gibt das erste Element zurück

    void apush(string name);              // Aktivität einfügen
    void apop(string akt);              // Aktivität löschen
    void display();                // Liste der Aktivitäten ausgeben
};

#endif



Hier die Definition der Methoden, wo ich Probleme habe:



C++:
void Projekt::setdauer(){
    Datum min;
    Datum max;
    Datum tmp;
    AList liste;
    liste = aliste;
    Aktivitaet* akt;
    akt = liste.front();
    min = akt->getvon();
    max = akt->getbis();
    while (akt != NULL){
        tmp = akt->getvon();
        if ((min.getyear() < tmp.getyear()) || ((min.getmonth() < tmp.getmonth()) && (min.getyear() == tmp.getyear())) || ((min.getday() < tmp.getday()) && (min.getmonth() == tmp.getmonth()) && min.getyear() == tmp.getyear())){
            akt = akt->getnexta();
        }else{
            min = tmp;
        }
        akt = akt->getnexta();
    }
    start = min;
    ende = max;
}



Und hier noch wie ein Element in die Liste eingefügt wird:


C++:
    if (lasta == NULL)                // Wenn Zeiger Last = NULL ist
      firsta = lasta = a1;            // first = last = a1
    else                                  // sonst    
       lasta->nexta = a1, lasta = a1;    // next-Zeiger von last auf a1 und last = a1
                    // am Ende der Liste einfügen

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.12.2004, 12:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du weißt 2x akt eine neues element zu:


C++:
while (akt != NULL){
        tmp = akt->getvon();
        if ((min.getyear() < tmp.getyear()) || ((min.getmonth() < tmp.getmonth()) && (min.getyear() == tmp.getyear())) || ((min.getday() < tmp.getday()) && (min.getmonth() == tmp.getmonth()) && min.getyear() == tmp.getyear())){
            akt = akt->getnexta(); // hier
        }else{
            min = tmp;
        }
        akt = akt->getnexta(); // und hier
    }



wenn beim 2ten mal akt == NULL ist, kriegst du nen segfault
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.12.2004, 14:20 Uhr
enrico



Ja stimmt, da war der Fehler. Dankeschön!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: