gpt4 book ai didi

json-c - 当 json -c json_object_to_json_string 释放内存时

转载 作者:行者123 更新时间:2023-12-03 23:31:37 24 4
gpt4 key购买 nike

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

最佳答案

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

我看到这个缓冲区来自 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;
}

delete 函数释放这个缓冲区:
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 引用计数,则字符串也会被释放,如果在释放后使用它,结果是不可预测的。

关于json-c - 当 json -c json_object_to_json_string 释放内存时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15920749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com