Jak odbierać dane o długości dynamicznej z kolejki wiadomości?

Muszę wysyłać i odbierać dynamiczne dane za pomocą kolejki komunikatów SysV dla projektu uniwersyteckiego.

Długość danych jest przesyłana w osobnej wiadomości,size jest już znany.

I tak staram się odbierać dane. Muszę przyznać, że nie jestem specjalistą od C ++, zwłaszcza jeśli chodzi o alokację pamięci.

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

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

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

Problem wydaje się byćmalloc zadzwoń, ale nie wiem, jak to zrobić dobrze.

EDYTOWAĆ

Próbuję mieć coś w rodzajuczytać metoda w opakowaniu OO wokół kolejek komunikatów. Chciałbym odczytać dane z kolejki wiadomości dochar[] lub astd::string. To, co mam teraz, wygląda (uproszczone) w ten sposób.

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

Wszystko, co dostaję, to błędy segmentacji lub całkowicie uszkodzone dane (chociaż dane te czasami zawierają to, czego chcę).

questionAnswers(5)

yourAnswerToTheQuestion