我正在使用cJSON library,我的功能如下:
void printJsonObject(cJSON *item)
{
char *json_string = cJSON_Print(item);
printf("%s\n", json_string);
}
此功能会泄漏内存吗?
答案 0 :(得分:4)
我从未使用过cJSON,但根据此link中的函数定义,它看起来像
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()
分配内存。否则,它将是内存泄漏。
答案 1 :(得分:2)
是的,这是内存泄漏。
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);
}
}