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