我将结构的地址传递给函数。
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中的联合,value是union的成员,data是unsigned char的数组。
我该怎样对elem->data
发送msg.messageData.value.data
的memcpy? (elem->data
是unsigned char
)
谢谢!!!
答案 0 :(得分:0)
语句崩溃,因为指针为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
的目标。