json -c json_object_to_json_string 释放内存时

ria*_*aqn 6 json-c

我正在使用 json-c 库将 json-object 发送到客户端。我注意到没有本机函数来释放 json_object_to_json_string 分配的内存。该库会自动释放它吗?或者我必须“free(str)”以避免内存泄漏?我试图阅读它的源代码,但它让我失去知觉......所以有人知道这一点吗?

sel*_*rer 5

看来你不需要手动释放它。

我看到这个缓冲区来自 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;
}
Run Code Online (Sandbox Code Playgroud)

删除函数释放该缓冲区:

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);
}
Run Code Online (Sandbox Code Playgroud)

重要的是要理解该缓冲区仅在对象有效时才有效。如果对象达到 0 引用计数,该字符串也会被释放,如果您在释放它后使用它,则结果是不可预测的。