3

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?

4

2 回答 2

6

我从未使用过 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()由调用者函数进行。否则,将是内存泄漏。

于 2014-12-10T06:24:15.567 回答
4

是的,这是内存泄漏。

返回的缓冲区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);
    }
}
于 2018-07-07T18:14:49.320 回答