使用Cjson解析造成内存溢出的解决办法

使用cjson解析json数据,在使用过程中发现有很多网友说运行一段时间,会造成内存申请失败,死机等情况,我也遇到了内存申请失败的问题,后来发现了如下几个问题

1.申请了内存没有释放 造成内存申请失败,下面记录下使用的注意问题

(1)使用root = cJSON_Parse(text); //将文本转成json格式,次函数里面申请了一块内存给root  所以在最后要释放root

 cJSON_Delete(root ); //释放cJSON_Parse()分配出来的内存空间

注意:创建获取object失败了,也要释放掉!!!!

    if(!root){
        cJSON_Delete(root);
        return -1;
    }else{
        cJSON * object = cJSON_GetObjectItem(root,"params");
        if(!object){
            cJSON_Delete(root);
            return -1;
        }

(2)使用out = cJSON_Print(root);//次函数将json数据转成字符串,这个函数内申请了一段内存给out,所以使用完out后也要释放

由于out不是json指针的数据格式所以使用cJSON_free(out);释放就可以,不要使用free,官方给的示例使用free,但是我们自己使用的时候可能已经移植了cjson到不同的平台,free就不一定适用。

(3)使用cJSON *new_json_str = cJSON_CreateString(str);//将一个字符串转成一个json对象,函数里面也涉及了内存分配,座椅用完以后也要释放cJSON_Delete(new_json_str );

暂时只用到上面几条,所以就发现了这几个,如果有朋友知道可以留言补充。总之就是在使用cjson函数时一定要看看函数内有没有涉及到内存申请,如果有在使用完以后一定释放。这样cjson用起来还是很方便的。

2.内存申请后内存指针变动,在释放的时候指针有偏移,造成内存释放不彻底,这种情况我没有仔细去测试,只是在原子论坛看到有网友这样解决的,也一起记录下来:链接http://www.openedv.com/forum.php?mod=viewthread&tid=229818&page=3

可以通过这个帖子了解
 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值