我正在使用libjosn-c
,如下所示,并遇到段错误错误。
如果我删除行 json_object_object_add(root, "Child", value);
,则不会发生错误。
int main(int argc, char **argv)
{
json_object *root = NULL, *value = NULL;
root = json_object_new_string("My Object");
value = json_object_new_string("My Child Object");
json_object_object_add(root, "Child", value);
printf("to string =%s\n", json_object_to_json_string(root));
json_object_put(value);
json_object_put(root);
return 0;
}
我对libjson-c
没有经验。
感谢您的帮助!
最佳答案
如果我是你,我会阅读 documentation在开始使用库之前先了解一下它。
如上所述here json_object_object_add(root, "Child", value)
将 value
的所有权转移给 root
。这意味着您不再负责 json_object_put
它。当您 json_object_put
为 root
时,它的 json_object_put
就是您的值
。
当您json_object_put
值
时,它的引用计数器下降到0并且它的内存被释放。当您 json_object_put
root
时,它会尝试 json_object_put
value
并失败,因为 value
不再存在。
如果您不希望value
比root
更长寿,只需删除json_object_put(value)
行即可。
如果您想在 root
释放后使用 value
,请使用:
json_object_object_add(root, "Child", json_object_get(value))
关于c++ - json_object_object_add,段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33449783/