c++ - Vector gets iterated more times than size() -
i've got piece of code:
for (std::vector<marker>::iterator = markers.begin(); != markers.end(); ++it) { if (it->getdots().size() < 3) { markers.erase(it); } }
in 1 of test inputs (the app image analysis) segfault. tried debug code (to no avail) , noticed 1 thing. when asking gdb p markers.size()
receive $9 = 3
. expect loop iterate 3 times, surprisingly (at least) 5 times. in fifth iteration there's segfault. noticed it's not dereference of *it
(here it->
) causes error. it's it->getdots()
, simple getter.
i write in c++ rarely, might simple mistake, neither debugging, nor googling brought solution. help?
i'd emphasize, on various different inputs (slightly different images) function works properly, it's harder me trace bug down.
vector::erase
invalidates iterators pointing element being erased, , elements follow. it
becomes invalid, , ++it
expression on next loop iteration exhibits undefined behavior.
the best way code logic erase-remove idiom.
Comments
Post a Comment