Вы пишете за пределами массива. Это не значит, что вы получите ошибку сегментации. Это просто означает, что у вас неопределенное поведение . Поведение вашей программы больше не ограничено стандартом Си. Может произойти все что угодно (в том числе программа, которая работает) - segfault - только один из возможных результатов.
На практике ошибка сегментации возникает, когда вы пытаетесь получить доступ к странице памяти, которая не отображается в вашем процессе операционной системой. Каждая страница имеет размер 4 КБ на типичном ПК с архитектурой x86, поэтому в основном вашему процессу предоставляется доступ к памяти частями по 4 КБ, и вы можете получить ошибку по умолчанию только в том случае, если вы пишете вне текущего блока.
С небольшими индексами, которые вы используете, вы все еще находитесь в пределах текущей страницы памяти, которая выделена вашему процессу, и поэтому ЦП не обнаруживает, что вы обращаетесь к памяти за пределами.