Выделять меньше места, чем необходимо для определенного типа?

Я относительно новичок в программировании на 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 байта записываются в какое-то место в памяти, которое не было выделено должным образом.

Работает ли он только потому, что не покидает стек?

Не мог бы кто-нибудь, пожалуйста, указать мне на место, где я мог бы найти просветление относительно этого материала?

5
задан Aramís C. D. 23 October 2011 в 19:05
поделиться