С философией всегда доверяй программисту. А также отсутствие проверки границ позволяет программе на C работать быстрее.
у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)
работать правильно?