c++ - json_object_object_add,段错误

标签 c++ linux libjson

我正在使用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_putroot 时,它的 json_object_put 就是您的

当您json_object_put 时,它的引用计数器下降到0并且它的内存被释放。当您 json_object_put root 时,它会尝试 json_object_put value 并失败,因为 value 不再存在。

如果您不希望valueroot更长寿,只需删除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/

相关文章:

c++ - 在 C++ 中动态声明二维数组

c++ - 删除 C 风格的 int vector 数组

python - Django 在 Linux 中找不到我的模型,但在 Windows 中可以

c++ - OpenCV:相对于引用图像移动/对齐面部图像(图像配准)

c++ - 将(临时?) std::string 传递给使用它来构造需要拷贝的对象的函数的最佳方法是什么?

linux - 在现场演示中显示 vim 命令键

linux - solaris elfedit : Is there something similar for linux ?(共享库编辑器)?

C++ 多类型映射,如 PHP stdClass

linux - 在 Linux 上安装 libjson-rpc-perl