我正在使用json-c库将json-object发送到client.And我注意到没有本机函数来释放json_object_to_json_string分配的内存。库是否自动释放它?或者我必须“释放(str)”以避免内存泄漏? 我试着阅读它的源代码,但这让我无意识......所以有人知道吗?
答案 0 :(得分:2)
您似乎无需手动释放它。
我看到这个缓冲区来自json_object(参见这个函数的最后一行):
const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
{
if (!jso)
return "null";
if ((!jso->_pb) && !(jso->_pb = printbuf_new()))
return NULL;
printbuf_reset(jso->_pb);
if(jso->_to_json_string(jso, jso->_pb, 0, flags) < 0)
return NULL;
return jso->_pb->buf;
}
删除功能释放此缓冲区:
static void json_object_generic_delete(struct json_object* jso)
{
#ifdef REFCOUNT_DEBUG
MC_DEBUG("json_object_delete_%s: %p\n",
json_type_to_name(jso->o_type), jso);
lh_table_delete(json_object_table, jso);
#endif /* REFCOUNT_DEBUG */
printbuf_free(jso->_pb);
free(jso);
}
重要的是要了解此缓冲区仅在对象有效时有效。如果对象达到0引用计数,则该字符串也将被释放,如果在释放它之后使用它,则结果是不可预测的。