问题描述
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);