【发布时间】:2011-11-13 20:51:23
【问题描述】:
我需要将数据写入一个结构,其中数据的长度取决于我要发送到设备的命令。为此,我定义了以下结构:
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() 的目的是重新调整数组数据的大小或将其从我的新命令结构中完全删除。我的代码有什么问题?这是用动态内存分配初始化结构的正确方法吗?
【问题讨论】:
-
数组不是指针——你不能重新分配数组的内存位置。
标签: c memory dynamic allocation realloc