Мне нужно записать данные в структуру, где длина данных зависит от команды, которую я хочу отправить на устройство.Для этого я определил следующую структуру:
typedef struct {
uint8 len; // Command length (cmd ... crc)
uint8 cmd; // Command code
uint8 data_length; // Data length
uint8 data[12]; // Data: max 12 Byte
uint8 crc_h; // CRC value MSB
uint8 crc_l; // CRC value LSB
}CMD_TYPE;
Примечание: члены cmd , * data_length * и crc , которые всегдаприсутствует, вместо этого элемент data может быть пустым или содержать до 12 байт.
Я создал функцию, которая возвращает инициализированную команду в соответствии с параметрами, переданными в функцию:
CMD_TYPE Device::get_cmd(uint8 cmd, uint8 data_len, uint8 *data)
{
CMD_TYPE cmd;
cmd.len = (4 + data_len) * sizeof(uint8);
cmd.cmd = cmd;
cmd.data_length = data_len;
cmd.data = (uint8 *)realloc(cmd.data, data_len*sizeof(uint8));
if(data_len > 0) memcpy(cmd.data, data, data_len);
add_crc16((uint8*)&cmd);
return cmd;
}
Функция get_cmd () используется следующим образом:
uint8 cmd_code = 0x01;
uint8 data[2] = {0xAB, 0xCD};
CMD_TYPE cmd = local_device->get_cmd(cmd_code, 2, data);
retVal = local_device->send(cmd);
Когда я пытаюсь скомпилировать этот код, я получаю сообщение об ошибке от компилятора для этой строки:
cmd.data = (uint8 *)realloc(cmd.data, data_len*sizeof(uint8));
и ошибка компилятора:
error: lvalue required as left operand of assignment
Цель использования realloc () - изменить размер данных массива или вообще удалить его из моей новой структуры команд.Что не так в моем коде?Это правильный способ инициализации структур с динамическим распределением памяти?