cJSON_Delete
cJSON_Delete釋放cJSON構造object時申請的記憶體資源
通常用法
cJSON *json = cJSON_CreateObject();
...
...
cJSON_Delete(json);
調用cJSON_Delete時産生segmentfault
錯誤段代碼:
cJSON *json = cJSON_CreateObject();
cJSON *payload = cJSON_CreateObject();
...
cJSON_AddItemObject(json, "payloaf", payload);
...
cJSON_Delete(payload);
cJSON_Delete(json);
構造一個json對象 并把payload對象作為一個節點加入到json中
經過debug發現cJSON_Delete(json)時發生了記憶體越界通路
檢視cJSON源碼可以發現 cJSON_Delete會主動删除每個節點的資源
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
{
cJSON *next = NULL;
while (item != NULL)
{
next = item->next;
if (!(item->type & cJSON_IsReference) && (item->child != NULL))
{
cJSON_Delete(item->child);
}
if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL))
{
global_hooks.deallocate(item->valuestring);
}
if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
{
global_hooks.deallocate(item->string);
}
global_hooks.deallocate(item);
item = next;
}
}
是以建立使用cJSON構造json對象後 隻需要調用cJSON_Delete删除json對象即可
節點的資源會被一并釋放掉.