我正在将结构的地址传递给函数。
void validate(void *ptr)
{
// A variable of type Msgmt Structure
Msgmt msg;
memset(&msg, 0, MSG_SIZE);
// Type casting the void pointer to this structure dev_t
dev_t *elem = (dev_t*)ptr;
msg.msg_id = 10;
if (elem->devCategory == VAL){
// This statement crashes the code
// memcpy(msg.messageData.value.data, elem->data, LEN);
// This statement goes through
memcpy(&msg.messageData.value.data,elem->data,LEN) ;
}
// ... do something
}
messageData 是 struct msg 中的 union 体,value 是 union 体的成员,data 是 unsigned char 数组。
我应该如何对 msg.messageData.value.data
执行 elem->data
的 memcpy? (elem->data
是一个unsigned char
的数组)
谢谢!!!
最佳答案
语句崩溃,因为指针为 NULL。
在这里清除成员。
memset(&msg, 0, MSG_SIZE);
// Type casting the void pointer to this structure dev_t
dev_t *elem = (dev_t*)ptr;
这是您唯一初始化的东西。
msg.msg_id = 10;
if (elem->devCategory == VAL){
在这里您访问了 NULL 指针,幸运的是您崩溃了。
// This statement crashes the code
// memcpy(msg.messageData.value.data, elem->data, LEN);
在这里你很可能会破坏其他内存,而不会崩溃。
// This statement goes through
memcpy(&msg.messageData.value.data,elem->data,LEN) ;
}
// ... do something
}
您必须为 msg.messageData.value.data
分配一些已定义的内存,然后才能将其用作 memcp
的目标。
关于c - 如何将数据从一个结构指针复制到另一个结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039899/