Wie erhalte ich dynamische Daten aus einer Nachrichtenwarteschlange?

Ich muss dynamische Daten über eine SysV-Nachrichtenwarteschlange für ein Universitätsprojekt senden und empfangen.

Die Länge der Daten wird in einer separaten Nachricht übertragen.size ist dafür schon bekannt.

Und so versuche ich, die Daten zu erhalten. Ich muss zugeben, dass ich kein C ++ - Spezialist bin, besonders wenn es um die Speicherzuweisung geht.

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

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

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

Das Problem scheint das zu seinmalloc anrufen, aber ich weiß nicht, wie ich das richtig machen soll.

BEARBEITEN

Was ich versuche, ist eine Art zu habenlesen Methode in einem OO-Wrapper um die Nachrichtenwarteschlangen. Ich möchte die Daten in der Nachrichtenwarteschlange in ein lesenchar[] oder einstd::string. Was ich jetzt habe sieht (vereinfacht) so aus.

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

Alles, was ich bekomme, sind Segmentierungsfehler oder vollständig beschädigte Daten (obwohl diese Daten manchmal enthalten, was ich will).

Antworten auf die Frage(5)

Ihre Antwort auf die Frage