使用mqqueue将数据读入缓冲区时出现问题

时间:2016-12-05 16:28:29

标签: c++ pointers casting pthreads mqueue

我使用mqueue在线程之间进行通信,并且我在传递对象时遇到了问题。

mq_sendmq_receivechar*作为对象的参数。

我按照以下方式使用它们。

foo* foo = new foo();
foo->set_id(3);
mq_send(myQueue, (char*)foo, 1024, 1);

然后

char* buffer;
while(true)
{
    ssize_t bytes_read;
    bytes_read = mq_receive(myQueue, buffer, 1024, NULL);
    foo* foo = (foo*) buffer;
    foo->get_id(); //equals 3
    //Send the object to another queue
    mq_send(myOtherQueue, buffer, 1024, 1);
}

到目前为止一切顺利。

问题出在这里

    char* buffer;
    while(true)
    {
        ssize_t bytes_read;
        bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
        foo* foo = (foo*) buffer;
        foo->get_id(); //equals garbage 323234234
    }

第二次施放缓冲区时,我得到了垃圾。 我读到有关static_castdynamic_cast的内容,但无法找到问题所在。

有什么问题?

1 个答案:

答案 0 :(得分:4)

我在这里看到两个问题。首先,是你的Foo TriviallyCopyable

其次,

char* buffer;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);

我没有看到buffer的任何分配。