cJSON如何避免内存泄漏

本文强调了在使用cJSON库时,cJSON_Delete用于递归释放json对象及其嵌套结构,而cJSON_free只针对非嵌套对象。务必区分接口返回的是引用还是实体对象,并正确选择释放方式,避免内存泄漏。
摘要由CSDN通过智能技术生成

`cJSON_Delete` 接口和 `cJSON_free` 接口不能混用,尤其是 json 对象必须使用`cJSON_Delete` 接口进行释放,因为 `cJSON_delete` 接口会递归释放一个 json 体内的所有对象,而 `cJSON_free` 只会进行一次释放。

接口功能   输出 释放方法
cJSON_CreateObject生成一个空白的 json 对象一个 json 对象 cJSON_Delete
cJSON_Parse将 json 字符串解析成 json 对象  一个 json 对象 cJSON_Delete
cJSON_ParseWithLength将固定长度 json 字符串解析成 json 对象一个 json 对象cJSON_Delete
cJSON_Duplicate复制一个 json 对象一个 json 对象 cJSON_Delete
cJSON_Print将 json 对象解析成格式化的 json 字符串 一个 json 字符串  cJSON_free
cJSON_PrintUnformatted将 json 对象解析成无格式化的 json 字符串 一个 json 字符串 cJSON_free
cJSON_PrintPreallocated将 json 对象解析成 json 字符串一个 json 字符串 cJSON_free


在使用时尽可能明确使用的接口返回的到底是引用还是实体对象,如果是实体对象的话,到底是应该使用 cJSON_Delete 方法释放的 json 对象还是 cJSON_free 释放的除了 json 对象以外的其他对象。其本质是, json 对象在进行创建时可能是多次 malloc 生成的嵌套对象,对象中的指针元素可能并不为空,而其他对象,如字符串等,是通过一次调用 cJSON_malloc 接口开辟的空间,非嵌套对象,可通过一次 cJSON_free 接口释放。

同时应注意,cJSON_malloc/cJSON_free 接口并不一定等同于 malloc/free 接口,所以调用 cjson 相关接口生产的对象,使用 vjson 的接口释放,而不用通过类似 free 之类的接口释放
                      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值