Я относительно новичок в программировании на C и мне трудно понять всю проблему распределения памяти.
Скажем, я делаю:
int *n = malloc(sizeof(char));
// (assuming malloc doesn't return NULL of course)
Это дает указатель на int, но я не выделил достаточно памяти для int. Почему же тогда это работает? Я мог бы даже бросить его в int явно, и это не беспокоило бы gcc. Я знаю, что компиляторы C очень минималистичны, но даже если я присваиваю значение *n, которое не помещается в символ, например:
*n = 300;
... и распечатайте его впоследствии:
printf("%d", *n);
... он работает отлично, хотя теперь, самое позднее, я ожидаю некоторую ошибку, такую как ошибка сегментации.
Я имею в виду, что sizeof(char) составляет 1, а sizeof(int) - 4 на моей машине.Следовательно, 3 байта записываются в какое-то место в памяти, которое не было выделено должным образом.
Работает ли он только потому, что не покидает стек?
Не мог бы кто-нибудь, пожалуйста, указать мне на место, где я мог бы найти просветление относительно этого материала?