C is a very flexible language as it cares mainly for "performance" and "simplicity for compiler". So, if you do
int a[11];
C standard only says that you are allocated 11* sizeof(int) bytes of memory which can be accessed through the variable 'a'.
'a' being a local variable, C language does not guarantee initialization -- its value is GARBAGE. It would have been initialized to "0" had 'a' been a static or global variable.
Now, when you access a[12] - the behaviour in "Undefined" as per C standard. You can get any output and a good programmer should not care for it. Depending on the compiler implemnetation and the environment on which the program runs you can get any output including Runtime error.