1

我将结构的地址传递给函数。

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 是结构 msg 中的联合,值是联合的成员,数据是无符号字符数组。

我应该如何做一个 memcpyelem->datamsg.messageData.value.data?(elem->data是一个数组unsigned char

谢谢 !!!

4

1 回答 1

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.

于 2013-08-04T06:40:04.383 回答