Я использую mqueue для связи между потоками, и у меня возникает проблема с передачей объектов.Проблема при чтении данных в буфер с использованием mqqueue
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
, и я не могу найти, в чем проблема.
Что не так?
спасибо @SergeyA. Я не понимаю вашего второго момента. mq_receive устанавливает буферную переменную – Marc
@Marc, нет, она копирует данные в предоставленный буфер. Но ваш буфер не выделен. – SergeyA
Это не сделано в mq_receive на основе длины (1024)? – Marc