*technically* `i` has dropped out of scope so *technically* any pointers to `i` are undefined. In this case gcc-4.7 will *reuse* the memory location where `i` resided to store `j`. The moral is be very careful where on the stack you're placing things because gcc will do things which are insane in any sense of the word except by the ANSI C specification.