当前位置: 首页 > 工具软件 > php-cjson > 使用案例 >

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

姜楷
2023-12-01

使用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

可以通过这个帖子了解
 

 类似资料: