Fehler in der STL Implementierung?
-
Hi Leute,
ich bekomme immer einen Segfault und weiß langsam keine andere Erklärung, als die, dass in der STL-Implementierung (gcc-4.1.1) was nicht stimmt. Ich iteriere über eine std::setstd::string und beim Weiterschalten des Iterators kommt es zum Segfault ("8796 Segmentation fault"):
/* stl_tree.h */ set<string>::iterator varIt = getV().begin(); while (varIt != getV().end()) { // ... ++varIt; // <-- hier kommt der Segfault! }Der Iterator wird in der Schleife nicht weiter manipuliert, nur einmal dereferenziert. Auch das set wird in der Schleife nicht verändert.
Mit dem Debugger hab ich den Fehler bis hier hin verfolgt:
_Self& operator++() { _M_node = _Rb_tree_increment(_M_node); // <-- hier knallts! return *this; }Ich weiß echt nicht weiter :(, hat jemand von Euch eine Idee?
1000 Dank!
Chrissi
-
Poste bitte die kürzeste Schleife, bei der es knallt.
-
könnte durchaus sein, das du deine iteratoren ungültig machst
(und du froh sein kannst, das es kracht anstatt daten kaputt zu machen ohne das es bemerkt wird)
-
Hey, danke für eure Posts!
@Michael: Mach ich übermorgen, ok? Komme grad nicht an den Code ran (bin schon aufm Heimweg ;)).
@R0nny: Ja, da hast du allerdings Recht. Das wird häufig vergessen.Ich hab jetzt das set zum Test in nen vector übertragen, auf dessen Inhalt ich dann mit dem Indexoperator zugreife: Kein Segfault mehr (ich hoffe es ist jetzt nicht so, wie r0nny geschrieben hat...).
Aber wissen, wo dran es lag, will ich schon...
Chrissi
-
Implementierst du da ne Baumstruktur?
-
Was liefert "getV()"? Wenn der Rückgabewert ein "std::setstd::string" ist, dann erzeugt getV().begin() einen Iterator auf eine temporäre Kopie.