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?
On
Yes, it is a memory leak.
Buffers returned by cJSON_Print must be freed by the caller. Please use the proper API (cJSON_free) rather than directly calling stdlib free.
See the cJSON maintainer's comment: https://github.com/DaveGamble/cJSON/issues/5#issuecomment-298469697
I recommend:
void printJsonObject(cJSON *item)
{
char *json_string = cJSON_Print(item);
if (json_string)
{
printf("%s\n", json_string);
cJSON_free(json_string);
}
}
I've never used cJSON , but as per the function definition present in this link, it looks like
and
From
print_value()function, the pointer returned is allocated bycJSON_strdup()[which is a modified version of the combination ofmalloc()andmemcpy()] and it is returned to the caller.As I see no method to track the allocation, IMO, the allocated memory needs to be
free()d by the caller function. Otherwise, it will be a memory leak.