/* * Zombie Iterator * * Vector going out of scope leaving zombie Iterator * Is this a dangling pointer? */ #include #include int main() { // these are in the scope of main() std::vector::iterator it; std::vector::iterator end; if ( true ) { // now we are in the scope of this block, lets cause trouble // this vector only exists for this block... then it's gone std::vector v; // fill the vector with 10 integers for ( int i = 10 ; i > 0 ; i-- ) { v.push_back(i); } // get our iterators (one at the beginning, the other at the end it = v.begin(); end = v.end(); std::cout << "iterator while vector alive: " << *it << '\n'; } // The vector (v) is now gone... the following would be a compile time error // v.pop_back(); // But this is not a compile time error... for ( ; it != end ; it++ ) { std::cout << "iterating over dead vector: " << *it << std::endl; // naughty *it = 0; // very naughty } }