关于asprintf的Valgrind:地址是大小<size> alloc'd的块内的0字节

时间:2018-01-15 20:46:50

标签: c linux valgrind asprintf

我有一些像这样的代码:

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

但是valgrind检查说

  

地址0x566c0f5是大小为53 alloc'd

的块内的0字节

可能是什么原因?谢谢。

1 个答案:

答案 0 :(得分:2)

(假设您的意思是mq_send(logQueue, msg, 1024, 0);,因为此处无法找到message

asprintf调用没问题(除非domainstatus是损坏/空指针)。

但是之后,您发送的邮件大小为1024,可能超出msg字符串大小(因为domainstatus可能是人类可读的短串)。

您应记下asprintf返回的打印字符数,并在下次通话中使用该字符:

char * msg;
int nb_printed = asprintf(&msg, "Connection to domain %s: %s", domain, status);
mq_send(logQueue, msg, nb_printed, 0);
free(msg);