我的结构体看起来像这样:
struct tlv_msg
{
uint8_t datatype; //type of data
/* data stored in a union */
union{
int32_t s32val; /* int */
int64_t s64val; /* long long */
uint32_t u32val; /* unsigned int */
uint64_t u64val; /* unsigned long long */
char* strval; /* string */
unsigned char* binval; /* any binary data */
};
uint32_t bytelen; /* no. bytes of union/data part */
};
这个结构体使用联合体来保存不同的数据类型。我有一个分配函数,它在堆上为结构体分配内存。如果我为整数类型(即联合体中的前四种类型)分配内存,我的想法是只需要按如下方式进行分配,这样正确吗?
tlv_msg* msg = malloc(sizeof(tlv_msg));
sizeof(tlv_msg)的返回值为24。我猜这应该足以容纳联合中最大的数据类型加上其他数据成员。(不确定为什么是24 - 有人能解释一下吗?)。
但如果要存储的数据类型是指针类型,比如char*,那么我还需要做以下操作:
msg->strval = (char*)malloc(sizeof(string_length+1);
我觉得这样做很有道理,看起来也可行,但想确认一下。
datatype
后面的3字节填充是有道理的。 - Shahbaz