c - memcpy() 段错误

标签 c pointers segmentation-fault memcpy

我正在序列化一个结构以通过套接字发送,但是当我尝试反序列化 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/

相关文章:

C 奇怪的指针算术

c++ - 指针数组和类型转换

编译器不允许我编辑传递的字符串

c - 将大 txt. 文件加载到 C 程序时出现段错误

c++ - 从 C 代码中调用 R 脚本

c - 如何在/etc/passwd 中添加、删除编辑用户名

从 MEX 调用 MATLAB 函数 "imread"

c++ - 在 C++ 中向本地安装的 MSSQL DB 添加值

c++ - 关于 shared_ptr

segmentation-fault - 使用电子围栏时 Openmpi 段错误