Как получить данные динамической длины из очереди сообщений?

Я должен отправлять и получать динамические данные, используя очередь сообщений SysV для университетского проекта.

Длина данных передается в отдельном сообщении,size уже известен.

И вот как я пытаюсь получить данные. Я должен признать, что я не специалист по C ++, особенно когда речь идет о распределении памяти.

struct {
    long mtype;
    char *mdata;
} msg;

msg.mdata = (char *)malloc(size * sizeof(char));

msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0);

The problem seems to be the malloc call, but I don't know how to do this right.

EDIT

То, что я пытаюсь, это иметь какое-тоread метод в OO-оболочке вокруг очередей сообщений. Я хотел бы прочитать данные из очереди сообщений вchar[] илиstd::string, То, что у меня сейчас выглядит (упрощенно), вот так.

bool Wrapper::read(char *data, int length)
{
    struct Message {
        long mtype;
        std::string mdata;
    };

    Message msg;
    msg.mdata = std::string(size, '\0');

    if(msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0) < 0)
    {
        return false;
    }

    memcpy(data, msg.mdata.c_str(), msg.mdata.size());

    return true;
}

Все, что я получаю, это ошибки сегментации или полностью поврежденные данные (хотя эти данные иногда содержат то, что я хочу).

Ответы на вопрос(5)

Ваш ответ на вопрос