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)