Я использую C/C++ и выключается, но сегодня я видел в определенной книге то, что я никогда раньше не видел:Автоматическое выделение памяти для C структуры
struct item {
int code;
float prize;
};
void main() {
struct item a,*b;
a.code = 123;
a.prize = 150.75;
printf ("Code: %d, Prize %d", a.code, a.prize);
b->code = 124;
b->prize = 200.75;
printf ("Code: %d, Prize %d", a->code, a->prize);
}
Приведенные выше принтами значения, как обычно, которые был сюрпризом относительно части *b
. Так как Ь является указателем, память, выделенная для него должно быть в стеке с размером size_t
в то время как данные должны быть доступны только путем выделения его отдельно в куче (ех 64 бита.):
b = (item*)malloc(sizeof(struct item));
По-видимому хотя, нет необходимости в этом. Как это возможно?
Это неопределенное поведение. Кажется, он работает в одном случае и может произойти с малейшим изменением кода или другим прогоном. –
Я голосую, чтобы закрыть этот вопрос как вне темы, потому что спрашивать о поведении неопределенного поведения бесполезно. –
В книге была опечатка/ошибка, так как сейчас это UB. – Jarod42