cjson内存泄漏问题注意事项

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

(1)使用root = cJSON_Parse(text);

         //将字符串转成json格式,函数中申请了一块内存给root  所以在最后要释放root

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

(2)使用out = cJSON_Print(root);(含有cJSON_PrintUnformatted函数)

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

        由于out不是json指针的数据格式,使用cJSON_free(out);释放即可

(3)使用cJSON *new_json_str = cJSON_Create**(str);

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

         若cJSON *new_json = cJSON_Create**(str)创建后,通过cJSON_AddItemToObject( json, "test", new_json );(或者cJSON_AddItemToArray),加入到数组或者object中,不需要单独释放new_json ,删除json时被添加的item(此处为申请的new_json)同时也会被删除。

注意:cJSON_Delete( ) ,cJSON_free ( ) 要区分使用,json格式的使用cJSON_Delete  ,指针格式使用cJSON_free,对应关系如下:               

申请内存: cJSON_Parse cJSON_Create  cJSON_Print
释放内存: cJSON_Delete  cJSON_Delete  cJSON_free

           

你可能感兴趣的:(json)