C Передача структуры по ссылке - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующая структура, которую я хочу передать по ссылке

typedef struct payload {
    char *payload;
    uint64_t payloadSize;
} Payload;

Ниже приведена реализация метода.

void parsePayload(const char *originalPayload, const int payloadSize, Payload *source) {    
    source->payloadLength = 5;
    source->payload = malloc(5 * sizeof(char));
    memcpy((void *)source->payload, originalPayload, 5);
}

с основной функцией здесь, которую я быЯ хотел бы передать выделенный объект с помощью метода, модифицирующего содержимое указателя

int main() {
    Payload *sourcePayload = malloc(sizeof(Payload));
    parsePayload("some random char", 16, &sourcePayload);
    Log("%d", sourcePayload->payloadSize);
}

Однако, кажется, что-то не так с выводом, когда я регистрирую payloadSize.Пожалуйста, сообщите, что я сделал неправильно.

Заранее спасибо!

1 Ответ

0 голосов
/ 29 января 2019

sourcePayload имеет тип Payload *, поэтому &sourcePayload имеет тип Payload **.Это несовместимо с тем, что ожидает функция, и ваш компилятор должен был предупредить вас об этом.

Поскольку sourcePayload уже имеет тип, соответствующий параметру функции, просто передайте его напрямую.

parsePayload("some random char", 16, sourcePayload);

Кроме того, обязательно free(sourcePayload->payload), затем free(sourcePayload) в конце main.

...