В системе с разбивкой по запросу, такой как linux, где страницы могут быть ~ 4k от того, что я прочитал, она обеспечивает защиту, проверяя, превышает ли размер стека или кучи количество страниц, отданных каждой. КОГДА я создаю две переменные
char *s = (char *) malloc(100);
char sa[100];
В цикле for я могу записать s [i] = 'c';
почти 4000 раз, прежде чем появится ошибка памяти
тогда как с sa [i] = 'c';
РЕДАКТИРОВАТЬ: я получаю ошибку сегментации
или ошибку разбивания стека
для любых значений, превышающих размер массива.
Я могу понять, что в первом случае есть ошибка страницы, и он видит, что больше страниц не было выделено в кучу, следовательно, нарушение памяти. Но что происходит во втором случае, проверяет ли gcc во время выполнения все предварительно выделенные переменные?
РЕДАКТИРОВАТЬ: я публикую весь код ниже
int main(int argc,char* argv[]){
char *s = (char *) malloc(20);
char sa[400] = {0};
int i ,count;
printf(" enter the number of chars to write: ");
scanf("%d",&count);
for (i=0;i<count;i++){
printf("%d\n",i);
sa[i] = 'a';
//s[i] = 'a';
}
free(s);
}