void* b = a;
b++;

As far as I can tell, that shouldn't be valid. Unless I'm mistaken, pointer arithmetic is not allowed on void pointers. Maybe it's a GCC extension that allows it. You could get...