Почему C дифференцируется в случае, если индекс массива выходит из строя
#include <stdio.h>
int main()
{
int a[10];
a[3]=4;
a[11]=3;//does not give segmentation fault
a[25]=4;//does not give segmentation fault
a[20000]=3; //gives segmentation fault
return 0;
}
Я понимаю, что он пытается получить доступ к памяти, выделенной для процесса или потока, в случае a[11] или a[25], и он выходит за пределы стека в случае a[20000].
Почему компилятор или компоновщик не дают ошибку, не знают ли они размер массива? Если нет, то как sizeof(a) работает правильно?