Почему 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)
работает правильно?