使用JSON-C的内存泄漏



我是JSON-C的新手,请查看我的示例代码,并告诉我它会造成任何内存泄漏,如果是,那么如何释放JSON-C对象。

    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。

提前感谢

NO,我们只需要为根对象调用json_object_put一次,只要我们没有显式地为json对象分配内存,这对我来说很有效。。。。。!!

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

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有一个引用计数模式,它可以为您提供有关对象的更多信息。让我知道,我可以详细说明。

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

json_object_put(new_obj);

是必需的。

相关内容

  • 没有找到相关文章

最新更新