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?
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.