Если вы обращаетесь к массиву вне границ, вы получаете неопределенное поведение. И неопределенное поведение - это просто: undefined . Ничего не может произойти, или ваша программа может взломать sh, все зависит или нет, если Луна находится в седьмом доме, или знаменитые носовые демоны могут вас беспокоить.
В вашем тесте программа, которую вы просто читаете за выделенным массивом, дополнительно. С некоторыми знаниями о фактическом компиляторе и целевой системе вы можете объяснить, что на самом деле происходит. Во многих случаях, как и у вас, ничего плохого не происходит, кроме напечатанных странных значений. Итак, приложение успешно завершается.
Пока вы не дадите GDB указывать вашему приложению следить за обращениями за пределами массива, GDB не заметит этого.
Примечание: В некоторых компиляторах есть возможность применить сгенерированный код для проверки индексов массива.