首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON-C进行内存泄漏

使用JSON-C进行内存泄漏
EN

Stack Overflow用户
提问于 2012-01-06 00:39:37
回答 3查看 10.2K关注 0票数 9

我是JSON-C的新手,请看我的示例代码,让我知道它是否会造成内存泄漏,如果是,那么如何释放JSON-C对象。

代码语言:javascript
复制
    struct json_object *new_obj         = NULL;
    new_obj = json_tokener_parse(strRawJSON);
    new_obj = json_object_object_get(new_obj, "FUU");
    if(NULL == new_obj){
        SYS_OUT("\nFUU not found in JSON");
        return NO;
    }
    new_obj = json_object_object_get(new_obj, "FOO"); // I m re-using new_obj, without free it?  
    if(NULL == new_obj){
        SYS_OUT("\nFOO not found in JSON");
        return NO;
    }
    // DO I need to clean new_obj, if yes then how ??

我是否需要清理new_obj,如果需要,则如何清理。有人可以帮助理解如何做内存管理JSON-C吗?

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-20 11:42:05

不,我们只需要为根对象调用json_object_put一次,只要我们没有显式地为json-object分配内存,这对我来说是有效的.....!!

票数 9
EN

Stack Overflow用户

发布于 2012-03-06 11:41:20

是的,我相信你的代码会泄露内存。问题是你会多次覆盖你的new_obj指针。你的代码应该是这样的:

代码语言:javascript
复制
struct json_object *new_obj, *fuu_obj, *foo_obj;
new_obj = json_tokener_parse(strRawJSON);
fuu_obj = json_object_object_get(new_obj, "FUU");
if(NULL == new_obj){
    SYS_OUT("\nFUU not found in JSON");
    return NO;
}
foo_obj = json_object_object_get(new_obj, "FOO"); 
if(NULL == new_obj){
    SYS_OUT("\nFOO not found in JSON");
    return NO;
}
json_object_put(foo_obj);
json_object_put(fuu_obj);
json_object_put(new_obj);

请让我知道这对你是否有效。如果您需要更多帮助,json-c有一个引用计数模式,可以为您提供有关对象的更多信息。让我知道,我可以更详细地说明这一点。

票数 7
EN

Stack Overflow用户

发布于 2019-05-30 14:58:25

json_tokener_parse()将创建一个必须删除的对象。在这种情况下

json_object_put(new_obj);

是必需的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8746155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档