c-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删除它。将其添加到数组或对象会转移其所有权,因此当删除该数组或对象时,它也会被删除。

参考:使用数据结构

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

cJSON_Delete(body);

最新更新