0

代码

    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 ***

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

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

4

1 回答 1

1

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

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

参考:使用数据结构

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

cJSON_Delete(body);
于 2021-03-12T04:12:22.917 回答