¿Cómo recibir datos de longitud dinámica de una cola de mensajes?

Tengo que enviar y recibir datos dinámicos utilizando una cola de mensajes SysV para un proyecto universitario.

La longitud de los datos se transmite en un mensaje separado,size es por lo tanto ya conocido.

Y así es como trato de recibir los datos. Debo admitir que no soy un especialista en C ++, especialmente cuando se trata de la asignación de memoria.

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

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

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

El problema parece ser elmalloc Llama, pero no sé cómo hacer esto bien.

EDITAR

Lo que intento es tener algún tipo deleer Método en un contenedor OO alrededor de las colas de mensajes. Me gustaría leer los datos en la cola de mensajes en unachar[] o unstd::string. Lo que tengo ahora se ve (simplificado) así.

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

Todo lo que obtengo son fallos de segmentación o datos completamente corruptos (aunque estos datos a veces contienen lo que quiero).

Respuestas a la pregunta(5)

Su respuesta a la pregunta