Функция malloc()
выделяет chars
, а sizeof(int)
обычно намного больше, чем 1 символ.
Например;если вы выделяете память для 2147483647 символов, но sizeof(int)
- это "4 символа";тогда вы только выделите достаточно памяти для «2147483647/4 = 536870911 дюймов».
Обратите внимание, что malloc()
обычно запрашивает у операционной системы больший объем памяти и разбивает ее на более мелкие части.Это означает, что когда вы получаете доступ к чему-то, что не было выделено с помощью malloc()
, вы все равно можете получить доступ к большему объему памяти, для которого malloc()
запрашивала ОС, поэтому вы не получите ошибку страницы («ошибка сегментации») каккак только вы получаете доступ к чему-то, что вы не выделяли (точнее, вы не получаете «ошибку сегментации», как только вы пытаетесь получить доступ к 536870912-му int
, для которого вы не выделяли память).