В системе с разбивкой по запросу, такой как Linux, где страницы могут составлять около 4 КБ из того, что я прочитал, она обеспечивает защиту, проверяя, превышает ли размер стека или кучи количество страниц, предоставленных каждой. КОГДА я создаю две переменные
char *s = (char *) malloc(100);
char sa[100];
В цикле for я могу написать s[i] = 'c';
почти 4000 раз, прежде чем возникнет ошибка памяти, тогда как с sa[i] = 'c';
EDIT: я получаю ошибку segmentation fault
или stack smashing
для всего, что превышает размер массива.
Я могу понять, что в первом случае есть ошибка страницы, и он видит, что больше страниц не было выделено в кучу, следовательно, нарушение памяти. Но что происходит во втором случае, проверяет ли 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);
}
gcc
для конкретного вопроса реализации. - person Bo Persson   schedule 14.08.2011&sa[i] == 0x7ffffffff000
). - person user786653   schedule 14.08.2011sa
никогда не выделяется более одного раза. - person Mat   schedule 14.08.2011