Почему sizeof успешно работает с еще не существующей переменной? - PullRequest
0 голосов
/ 22 января 2019

Сегодня у меня были проблемы с поврежденной кучей на ESP32. Как оказалось, ошибка была вызвана этой строкой:

u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(cmdinfo));

Когда я имел в виду

u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(u8x8_i2c_cmdinfo));

Меня действительно удивило, что неправильная версия вообще скомпилирована.

Почему это работает? Что он на самом деле делает?

1 Ответ

0 голосов
/ 22 января 2019

Код компилируется, потому что переменная существует после ее объявления.И эта часть только что объявила: u8x8_i2c_cmdinfo* cmdinfo.

Вы не удивитесь, если это сработает, верно?

u8x8_i2c_cmdinfo* cmdinfo;
cmdinfo = malloc(sizeof(cmdinfo));

Имейте в виду, что хотя ваш код компилируется нормально, онимеет неприятную ошибкуВы выделяете место под размер указателя, скорее всего, не то, что вы хотите сделать.

...