Iterieren ueber set klappt nicht
-
Mahlzeit!
Folgender Code:
int size = myIDs.size() ); std::set<int>::const_iterator it = myIDs.begin(); std::set<int>::const_iterator itEnd = myIDs.end(); for(; it != itEnd; ++it) writeInt( *it ); // hier crasht das Programm
Wenn ich im Debugger durch den Code steppe, sehe ich: das std::set<int> myIDs ist leer, size ist 0. Wie kann es dann sein, dass er die Schleife betritt? (in der writeInt() Zeile crasht er dann auch)
-
Also dein Code schnipsel geht bei mir nicht in die loop rein.
-
Was macht
writeInt
? Ist Multithreading im Spiel? Ist das ueberhaupt dein echter Code (ist das nicht ein Tippfehler in der ersten Zeile)?Uebrigens:
std::set<int>::const_iterator it = myIDs.begin(); std::set<int>::const_iterator itEnd = myIDs.end(); for(; it != itEnd; ++it) writeInt( *it ); // hier crasht das Programm
Solltest du abkuerzen koennen zu
std::for_each( myIDs.begin(), myIDs.end(), writeInt );
-
Das ist nicht der Originalcode. Steht hinter dem for-Kopf vielleicht eine ';' ?
-
Ich habe den Originalcode minimal geaendert, um es aufs Problem an sich zu vereinfachen.
Hier is der Originalcode:std::set<int>::const_iterator it = junc->element[i].edge[j].laneIDs.begin(); std::set<int>::const_iterator itEnd = junc->element[i].edge[j].laneIDs.end(); for(; it != itEnd; ++it) writeInt( *it );
Er stuerzt nach wie vor in writeInt() in der for Schleife ab. Hinter der for Schleife ist KEIN Semikolon! Ich raff nicht, wieso er die Schleife betritt!
-
Kannst du in deinem Debugger sehen auf welche Values deine Iteratoren gesetzt werden?
Ansonsten was sind das fuer Elemente?
-
Dann wird wohl irgendetwas im Ausdruck
junc->element[i].edge[j].laneIDs
ungültig sein, sprich Zeiger zeigt irgendwo hin, i oder j zu gross ...
-
manni66 schrieb:
Dann wird wohl irgendetwas im Ausdruck
junc->element[i].edge[j].laneIDs
ungültig sein, sprich Zeiger zeigt irgendwo hin, i oder j zu gross ...
Oder ein anderer falsche Zugriffsfehler könnte den Speicher der set irgendwie manipuliert haben...