Wieso wird diese Schleife durchlaufen?



  • Hallo Leute,

    ich habe hier ein Problem, das ich nicht raffe:

    for(int i = 0; i < mTypeSections.size() - 1; i++) 
        mTypeSections[i].end = mTypeSections[i+1].start;
    

    Der vector mTypeSections ist leer und dennoch wird der Körper der Schleife betreten (was dann zum Absturz führt)! Wie kann das sein, dass der Code in die Schleife geht? 0 ist doch NICHT kleiner als -1??? 😕



  • size() liefert size_t und ist unsigned, unsigned(0)-1 ist eine sehr sehr große zahl.



  • Ah, macht Sinn. Wie schreibe ich dann meine Schleife am besten um? Den Rückgabewert von size() auf (int) casten?



  • Verwirrt22 schrieb:

    Hallo Leute,

    ich habe hier ein Problem, das ich nicht raffe:

    for(int i = 0; i < mTypeSections.size() - 1; i++) 
        mTypeSections[i].end = mTypeSections[i+1].start;
    

    Der vector mTypeSections ist leer und dennoch wird der Körper der Schleife betreten (was dann zum Absturz führt)! Wie kann das sein, dass der Code in die Schleife geht? 0 ist doch NICHT kleiner als -1??? 😕

    Du solltest so auch keine Vector schleife bauen.

    E.g.

    for (auto it = std::begin(vec); it != std::end(vec); ++it)
    {
    }
    


  • Oder wenns (warum auch immer) ohne Iterator gehen muss: lass das -1 weg, das ist eh falsch.



  • for(int i = 0; i < mTypeSections.size() - 1; i++) 
        mTypeSections[i].end = mTypeSections[i+1].start;
    

    Hmm, i um eins hochtrenformieren?

    for(int i = 1; i < mTypeSections.size() ; i++) 
        mTypeSections[i-1].end = mTypeSections[i].start;
    

    oder mit einem if schützen

    if(mTypeSections.size() > 0)
        for(int i = 0; i < mTypeSections.size() - 1; i++)
            mTypeSections[i].end = mTypeSections[i+1].start;
    


  • Ich schreibe bei so was in der Regel

    //                       v-- HIER
    for(std::size_t i = 0; i + 1 < mTypeSections.size(); ++i)
    

Log in to reply