V789. Iterators for the container, used in the range-based for loop, become invalid upon a function call.

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.


This diagnostic is classified as:

You can look at examples of errors detected by the V789 diagnostic.

Bugs Found

Checked Projects
Collected Errors
14 302
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →