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