c语言 - 瓦尔格林德 关于 asprintf:地址在分配大小的块内为 0 字节<size>



我有一些这样的代码:

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 字节

分配

可能是什么原因?谢谢。

(假设你的意思是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);

最新更新