I am using the cJSON library and I have a function as follows:
void printJsonObject(cJSON *item)
{
char *json_string = cJSON_Print(item);
printf("%s\n", json_string);
}
Will this function leak memory?
I am using the cJSON library and I have a function as follows:
void printJsonObject(cJSON *item)
{
char *json_string = cJSON_Print(item);
printf("%s\n", json_string);
}
Will this function leak memory?
我从未使用过 cJSON,但根据此链接中的函数定义,它看起来像
char *cJSON_Print(cJSON *item) {return print_value(item,0,1);}
和
static char *print_value(cJSON *item,int depth,int fmt);
从print_value()
函数中,返回的指针由cJSON_strdup()
[这是和的组合的修改版本]分配,malloc()
并memcpy()
返回给调用者。
由于我看不到跟踪分配的方法,IMO,分配的内存需要free()
由调用者函数进行。否则,将是内存泄漏。
是的,这是内存泄漏。
返回的缓冲区cJSON_Print
必须由调用者释放。请使用正确的 API ( cJSON_free
) 而不是直接调用 stdlib free
。
请参阅 cJSON 维护者的评论:https ://github.com/DaveGamble/cJSON/issues/5#issuecomment-298469697
我建议:
void printJsonObject(cJSON *item)
{
char *json_string = cJSON_Print(item);
if (json_string)
{
printf("%s\n", json_string);
cJSON_free(json_string);
}
}