我正在序列化一个结构以通过套接字发送,但是当我尝试反序列化 memcpy 时,会返回一个段错误
这是我的序列化代码(有效):
unsigned char serialize(msg_t msg)
{
unsigned char out_buf[sizeof(msg.id)+sizeof(msg.msg)];
unsigned char *p = out_buf;
//Serialize id
unsigned int idX = htonl(msg.id);
memcpy(p,&idX,sizeof(idX));
p += sizeof(idX);
//Serialize msg
memcpy(p,msg.msg,sizeof(msg.msg));
p += sizeof(msg.msg);
return out_buf;
}
这就是反序列化(不起作用)
msg_t deserialize(unsigned char buff)
{
msg_t msg;
unsigned char *p = buff;
unsigned int *idX = malloc(sizeof(unsigned int));
char *mess = malloc(sizeof(50));
printf("Deserialization start\n");
//deserialize id
memcpy(idX,p,sizeof(unsigned int));
msg.id = ntohl(idX);
p += sizeof(idX);
printf("ID deserializzato\n");
//deserialize msg
memcpy(msg.msg,p,sizeof(msg.msg));
printf("msg deserializzato\n");
return msg;
}
这是结构:
typedef struct{
int id;
char* msg;
} msg_t;
我知道我在 idX 上犯了一个错误,但我不明白是什么
最佳答案
我看到的一个问题:
unsigned char buff
应改为
unsigned char * buff
不是吗? 并确保在传入之前已充分分配 buff
关于c - memcpy() 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630806/