The analyzer has detected invalidation of an iterator in a range-based 'for' loop.
Consider the following example:
std::vector<int> numbers;
for (int num : numbers)
{
numbers.push_back(num * 2);
}
This code fragment does the same as this one:
for (auto __begin = begin(numbers), __end = end(numbers);
__begin != __end; ++__begin) {
int num = *__begin;
numbers.push_back(num * 2);
}
With the code rewritten in that way, it becomes obvious that the iterators '__begin' and '__end' can be invalidated when executing the 'push_back' function if memory is reallocated inside the vector.
If you simultaneously need to modify the container and read values from it, it is better to use functions that return a new iterator after modification, or indexes in the case of the 'std::vector' class.
References:
This diagnostic is classified as:
|
You can look at examples of errors detected by the V789 diagnostic. |