cJSON_Delete();导致 free(): 无效指针: 0xb5db1e18

问题描述

代码

    cJSON *body = cJSON_Duplicate(record,true);

    cJSON_AddItemToObject(body,KEY_LOG,log);

    cJSON *array_pl = cJSON_CreateArray();
    cJSON_AddItemToArray(array_pl,body);

    cJSON *payload = cJSON_CreateObject();
    cJSON_AddItemToObject(payload,KEY_PAYLOAD,array_pl);

cJSON_Delete(body);
cJSON_Delete(array_pl);
cJSON_Delete(payload);

每当我使用 cJSON_Delete() 程序都会崩溃并给出错误 *** Error in `./sample': free(): invalid pointer: 0xb5db1e18 ***

我对此进行了大量搜索,但找不到解决方案。

请告诉我这是如何工作的?

解决方法

引用自 https://github.com/DaveGamble/cJSON,所以请阅读文档。

重要提示:如果您已经向数组或对象添加了项目,则不得使用 cJSON_Delete 删除它。将它添加到数组或对象会转移其所有权,因此当该数组或对象被删除时,它也会被删除。

参考:Working with the data structure

所以你只需要释放body,它就会释放里面分配的项目。删除另外两个删除即可解决问题。

cJSON_Delete(body);