【发布时间】:2014-07-01 02:25:18
【问题描述】:
我正在序列化一个结构以通过套接字发送,但是当我尝试反序列化 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 上犯了一个错误,但我不明白是什么
【问题讨论】:
-
代码不会像写的那样编译。
-
这是什么
50?在每个,后面留一个空格,让您的代码更具可读性。 -
使用你的调试器看看出了什么问题。是从源读取还是写入目标有问题?
标签: c pointers segmentation-fault memcpy