The Perils of a Container’s Reallocation

The Perils of a Container’s Reallocation

When a container reallocates its elements, their addresses change correspondingly. Consequently, the values of existing iterators are invalidated:

 #include #include using namespace std;void main() {  list  payroll;   payroll.push_back(5000.00);  list::iterator p = payroll.begin(); //p points to the first element  for (int i = 0 ; i 

In this example, it may well be the case that payroll reallocated itself during the insertion of 10 additional elements, and as a result invalidated the value of p. Using an invalid iterator yields undefined behavior. It's exactly as if you were using a pointer with the address of a deleted object. To be on the safe side, you should re-assign the iterator's value:

 for (int i = 0 ; i 


Share the Post: