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.


  • Mod

    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...


Anmelden zum Antworten