1

スレッド間の通信にmqueueを使用していますが、オブジェクトの受け渡しに問題があります。

mq_sendとをオブジェクトのパラメーターとしてmq_receive受け取ります。char*

私はそれらを次のように使用します。

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
    }

バッファを 2 回目にキャストすると、ガベージが発生します。について読んだところstatic_castdynamic_cast何が問題なのかわかりません。

なにが問題ですか?

4

1 に答える 1

4

ここには 2 つの問題があります。まず、あなたは FooTriviallyCopyableですか?

2番、

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

の割り当てが見当たりませんbuffer

于 2016-12-05T16:30:30.660 に答える