1

我试图使用它,但是当我使用 valgrind 运行它时,我遇到了一些内存问题。

例如

char *serialize_file(t_file_package *pack) {

     char *payLoad = malloc(numDigits(pack->file_desc)+numDigits(pack->priority)+strlen(pack->code)+2);
     sprintf(payLoad, "%d#%d#%s", (uint32_t)pack->file_desc,(int16_t)pack->priority, pack->code);
     char *pack = malloc(numDigits(PROCESS) + numDigits((int64_t)strlen(payLoad)) + strlen(payLoad)+2);

     sprintf(pack, "%d#%d#%s",PROCESS, strlen(payLoad), payLoad);
     free(payLoad);
     return pack;
}

我知道 asprintf 的存在,但我不知道为什么我不能在我的 GNU ANSI C 项目中使用它...我的 Eclipse 说该函数无法识别

提前谢谢你!

4

2 回答 2

1

您忘记了尾随空字符'\0'。在调用的参数中再添加一个字节malloc()(替换+2+3),一切都应该没问题。

于 2012-12-09T18:24:06.963 回答
1

您不允许字符串末尾的空字符有空格 - 字符串需要空格用于“file_desc”中的数字、“priority”中的数字、“code”中的字符、两个“#”字符终端空字符。

第二次调用 malloc 也存在同样的问题

于 2012-12-09T18:24:36.620 回答