Проблема при чтении данных в буфер с помощью mqqueue

Я использую 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
    }

Во второй раз, когда я использую буфер, я получаю мусор. Я читаю о static_cast а также dynamic_cast и я не могу найти в чем проблема.

Что случилось?

1 ответ

Решение

Я вижу две проблемы здесь. Во-первых, это ваш Foo TriviallyCopyable?

Во-вторых,

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

Я не вижу никакого выделения для buffer,

Другие вопросы по тегам