是否应该由调用者释放cJSON_Print()的返回值?

时间:2014-12-10 06:13:22

标签: c json cjson

我正在使用cJSON library,我的功能如下:

void printJsonObject(cJSON *item)
{
    char *json_string = cJSON_Print(item);
    printf("%s\n", json_string);
}

此功能会泄漏内存吗?

2 个答案:

答案 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);
    }
}