PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++: liste.pop_back() beendet Programm einfach


Gast
2006-01-21, 20:11:56
Hi (schon wieder ich ;-) )


list<string> myListe;
...
myListe.push_back(struct.name); // ein string innerhalb eines structs
...
if (irgendwas) {
cout << "Groesse: " << myListe.size() << endl;
myListe.pop_back();
cout << "Groesse: " << myListe.size() << endl;
}
cout << "Ende" << endl;


Ich benutze die Liste als Stack, hinten anfügen und hinten wieder löschen.
Ich füge strings in die Liste und wenn irgendwas passiert, entferne ich sie wieder (nicht sichtbar werden noch eine Reihe Dateioperationen durchgeführt).

Wenn irgendwas == true ist, dann ist die Ausgabe beispielsweise so, wenn myListe einen string enthält:
1
0

Das Element wird erfolgreich entfernt (0 wird ausgegeben), aber "Ende" nicht mehr. Ich bin wieder am Prompt angelangt.

Kommentiere ich die Zeile mit pop_back() aus, ist die Ausgabe:
1
1
Ende

Ich kann mir nicht erklären, was da beim Fall mit pop_back() nicht funktionieren soll, wenn die folgende Anweisung noch ausgeführt wird, die danach aber nicht mehr... ?!?

Expandable
2006-01-21, 23:11:25
Wird da irgendeine Ausnahme geworfen?

zeckensack
2006-01-22, 02:00:20
Welchen Compiler benutzt du? Version?

Gnafoo
2006-01-22, 02:11:55
Mal ins Blaue geschossen: Iterierst du eventuell durch die Liste und schmeißt dabei Einträge raus, so dass dein aktueller Zeiger/Zähler/wieauchimmer dadurch ungültig wird?
Ansonsten: Sieht auf den ersten Blick richtig aus. Aber da recht viel ausgelassen wurde, muss das nicht viel heißen. Womöglich veränderst du unwissentlich irgendetwas im Speicherbereich der Liste oder ähnliches.

Gast
2006-01-22, 10:56:58
Wenn ich anstatt einer List einen Vector nehme fonktionierts, w-wieso? oO

-Nein, keine Ausnahme wird geworfen.
1
0
C:\blah>

-MS Visual C++ .NET (MS Entwicklungsumgebung 2003 7.1.3088)

-Ich iteriere selber gar nicht, da ich nur das 'back' der nicht-leeren Liste 'poppe'. ;)