Como receber dados de tamanho dinâmico de uma fila de mensagens?

Eu tenho que enviar e receber dados dinâmicos usando uma fila de mensagens SysV para um projeto universitário.

O comprimento dos dados é transmitido em uma mensagem separada,size é já conhecido.

E é assim que eu tento receber os dados. Eu tenho que admitir que eu não sou um especialista em C ++, especialmente quando se trata de alocação de memória.

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

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

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

O problema parece ser omalloc chamar, mas eu não sei como fazer isso direito.

EDITAR

O que eu tento é ter algum tipo deler método em um wrapper OO ao redor das filas de mensagens. Eu gostaria de ler os dados na fila de mensagens em umchar[] ou umstd::string. O que eu tenho agora parece (simplificado) assim.

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;
}

Tudo o que recebo são falhas de segmentação ou dados completamente corrompidos (embora esses dados, por vezes, contenham o que eu quero).

questionAnswers(5)

yourAnswerToTheQuestion