Вы выделяете 1 байт с malloc
в начале вашей программы.malloc
может фактически выделить больше памяти, чем вы запрашиваете по различным причинам (например, оптимизировать будущие перераспределения).Кроме того, операционная система обычно защищает память на основе страниц, поэтому при обращении к одной и той же странице ошибки не возникают.Доступ к памяти, которую вы явно не распределили, имеет неопределенное поведение, и его следует избегать, даже если ваша программа, кажется, работает.
Что касается вашей программы, я предполагаю, что ошибка в том, что вы заявляете, что c
имеетchar*
.Указатель обычно имеет длину 4 или 8 байт, а вы выделяете всего 1 байт.Если вы объявите c
как char
, который имеет размер 1 байт, ваша программа должна работать.
В любом случае, безопаснее использовать sizeof
при выделении памяти с помощью malloc
или realloc
, поскольку размер переменной может варьироваться в разных системах.Например, в 32-битной системе указатель обычно равен 4B, а в 64-битной системе обычно равен 8B.