0

我有一些这样的代码:

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 check 说

地址 0x566c0f5 在大小为 53 的块内分配了 0 个字节

可能是什么原因?谢谢你。

4

1 回答 1

2

(假设你的意思是mq_send(logQueue, msg, 1024, 0);因为message在这里找不到)

asprintfcall 没问题(除非domainorstatus是损坏/空指针)。

但是紧接着,您发送的消息 size1024可能超出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);
于 2018-01-15T20:54:21.283 回答