Ist dieser Code nicht (mehr) korrekt?
-
Versuche gerade, mein Projekt von VS2010 auf VS2012 upzugraden. Dabei crasht das Programm mit der Meldung "List iterators not compatible". Ich konnte den Fehler auf folgendes Minimalbeispiel reduzieren:
std::list<float> test; std::list<float>::iterator end = test.end(); test.push_back(0.1f); test.clear(); assert(test.end() == end); // failIst es korrekt, dass der "end" iterator durch clear() invalidiert wird? Das war nämlich vorher offenbar nicht so. Wenn nicht, muss irgendwas anderes im Eimer sein

-
Daniel E schrieb:
Ist es korrekt, dass der "end" iterator durch clear() invalidiert wird?
Ja, der wird praktisch bei jeder Grössenänderung invalid.
Daniel E schrieb:
Das war nämlich vorher offenbar nicht so.
Das war schon immer so.
-
Der Code ist korrekt und sollte funktionieren. Bei einer list werden beim Löschen von Elementen explizit nur Iteratoren auf diese Elemente ungültig, end ist keines dieser Elemente. Dies hat sich in C++11 auch nicht geändert. GCC erzeugt ein Programm, welches korrekt durchläuft. Hast du eventuell eine übereifrige Debugeinstellung aktiviert?
-
Bei einem std::vector wäre mir das klar, aber bei einer Liste?
http://www.cplusplus.com/reference/list/list/push_back/
Iterator validity
No changes.http://www.cplusplus.com/reference/list/list/clear/
Iterator validity
All iterators, references and pointers related to this container are invalidated, except the end iterators.
-
Jap, kann eigentlich nur ein Bug in der STL sein. Schreib mal STL an.

n3485 23.3.5.4/3 schrieb:
Effects: Invalidates only the iterators and references to the erased elements.
-
Danke, SeppJ! Nicht dass ich wüsste. Habe das Projekt einfach nur automatisch konvertieren lassen. Wonach könnte ich schauen?
-
...
-
cooky451 schrieb:
Jap, kann eigentlich nur ein Bug in der STL sein. Schreib mal STL an.

Ich hatte das als Scherz interpretiert(?), aber es passiert selbst in einem frischen Projekt.
-
Heißt das nun, dass dieses Verhalten normal sein kann? Dann verwirrt mich der Eintrag auf http://www.cplusplus.com/reference/list/list/clear/
-
...