Valgrind об asprintf: адрес равен 0 байтам внутри блока размером <size> alloc'd

У меня есть такой код:

void logConnectionStatus(char * domain, char * status, mqd_t logQueue) {
    char * message;
    asprintf(&message, "Connection to domain %s: %s", domain, status);
    mq_send(logQueue, message, 1024, 0);
    free(msg);
}

но проверка Вальгринда говорит, что

Адрес 0x566c0f5 составляет 0 байтов внутри блока размером 53

В чем может быть причина? Спасибо.

1 ответ

Решение

(это предполагает, что вы имеете в виду mq_send(logQueue, msg, 1024, 0); поскольку message здесь нигде нет)

asprintf вызов в порядке (если domain или же status повреждены / нулевые указатели).

Но сразу после этого вы отправляете сообщение размером 1024, вероятно, далеко за msg размер строки (с domain а также status вероятно читаемые человеком короткие строки).

Вы должны записать количество напечатанных символов, которые asprintf возвращает и использует это в следующем вызове:

char * msg;
int nb_printed = asprintf(&msg, "Connection to domain %s: %s", domain, status);
mq_send(logQueue, msg, nb_printed, 0);
free(msg);
Другие вопросы по тегам