Fragen zu STL List Container
-
Hallo Ihr alle,
irgendwie verstehe ich die Ausgabe (und den Absturz) meines Programmes nicht.
Zunöchst in Worten:Es sollen aus einer Textdatei mehrere Datensätze mit Artikelinformationen ausgelesen werden, wobei jeder Artikel über verschiedene Felder verfügt (Art.Nr., Name...etc.).Immer dann, wenn ein Artikel komplett mit allen Feldern in ein Objekt eingelesen ist, soll dieses in einen STL List- Container eingfügt werden. Zur Kontrolle, ob alles geklappt hat lasse ich immer beim "in den Container schreiben" die Artikelnummer des gerade abgelgeten Artikels ausgeben.
Leider funktioniert das nicht so richtig.Hier die Codezeilen, die einen Eintrag an die Methode übergeben, welche diesen dann in einer STL Liste speichern soll:
if (roh.length()<15 && Aktuell!=noise) { artikelliste->AddRec(kartei); delete kartei; kartei=new ClArtikel; }
kartei ist hierbei der Name des Objekts in das die Artikelinformationen eingelesen werden, es ist weiter oben als
ClArtikel *kartei; kartei= new ClArtikel;
deklariert und initialisiert. Die Methode, welche den Eintrag in die Liste schreibt ist folgende:
void ClInkunabel::AddRec(ClArtikel *eintrag) { bestand.push_back(eintrag); TestAusgabe(bestand); }
bestand ist der Name der Liste. Die Ausgabe, welche im beim Programmtest bekomme ist folgende (sinngemäss):
*
Artikel1
Artikel2
Artikel2
Artikel3
Artikel3
Artikel3
*
Danach verabschiedet sich das Programm mit dieser Fehlermeldung:Unhandled exception at 0x77e53887 in ohne GUI.exe: Microsoft C++ exception: std::bad_alloc @ 0x0012e9c4
Warum???? Bin Ecuh wie immer für jede Hilfe dankbar.
-
Wie ist die Liste deklariert ?
Was macht TestAusgabe ?
-
Die Liste ist folgendermassen deklariert:
list<ClArtikel*> bestand;
list<ClArtikel*>::iterator records;TestAusgabe macht:
for (records=bestand.begin();records!=bestand.end();records++) { cout << (*records)->showRec() << endl; }
Ausserdem habe ich im Anfangsposting bestand fälschlicherweise einen Iterator genannt, das ist natürlich der Name der Liste .
-
Du schreibst in Deine Liste keine Kopie sondern nur einen Zeiger auf deine Artikel.
Denn Zeiger machst Du aber nach dem Einfügen mit delete gleich wieder ungültig!
-
tcpppl 3rd, 14.10 bad_alloc wird von new geworfen, also hast du irgendwo ein speicherproblem (ich tipp auch mal auf dein wildes verhalten im heap). ansonsten kannst du bad_alloc abfangen, um weitere informationen zu erhalten (bsp. const char *bad_alloc::what(), weiß aber nich ausm kopp, was dat zurück gibt).
-
Danke!
Nachdem ich besagtes delete entfernt hatte, funktioniert's.