cJson堆内存释放问题

cJSON_Delete(),是用来释放json对象的,释放父JSON对象后,子JSON对象也会被释放。

CJSON_free(),是用来释放其他对象的。

cpp 复制代码
int main(void)
{
    cJSON* cjson_test = NULL;
    cJSON* cjson_address = NULL;
    cJSON* cjson_skill = NULL;
    char* str = NULL;

    /* 创建一个JSON数据对象(链表头结点) */
    cjson_test = cJSON_CreateObject();

    /* 添加一条字符串类型的JSON数据(添加一个链表节点) */
    cJSON_AddStringToObject(cjson_test, "name", "mculover666");

    /* 添加一条整数类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "age", 22);

    /* 添加一条浮点类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "weight", 55.5);

    /* 添加一个嵌套的JSON数据(添加一个链表节点) */
    cjson_address = cJSON_CreateObject();
    cJSON_AddStringToObject(cjson_address, "country", "China");
    cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);
    cJSON_AddItemToObject(cjson_test, "address", cjson_address);

    /* 添加一个数组类型的JSON数据(添加一个链表节点) */
    cjson_skill = cJSON_CreateArray();
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("C"));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("Java"));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("Python"));
    cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);

    /* 添加一个值为 False 的布尔类型的JSON数据(添加一个链表节点) */
    cJSON_AddFalseToObject(cjson_test, "student");

    /* 打印JSON对象(整条链表)的所有数据 */
    str = cJSON_Print(cjson_test);
    printf("%s\n", str);
    cJSON_Delete(cjson_test);
    cJSON_free(str);
    system("pause");
    return 0;
}
相关推荐
福尔摩斯张1 小时前
C语言核心:string函数族处理与递归实战
c语言·开发语言·数据结构·c++·算法·c#
liu****2 小时前
5.C语言数组
c语言·开发语言·c++
chenzhou__2 小时前
LinuxC语言并发程序笔记(第二十天)
linux·c语言·笔记·学习
IT方大同3 小时前
C语言的组成部分
c语言·开发语言
用户043543771953 小时前
C语言:数组入门及其基础算法详解
c语言
say_fall3 小时前
WinAPI 极简教程:超简单的 Windows 接口入门
c语言·windows
星轨初途5 小时前
数据结构二叉树之链式结构(3)(下)
c语言·网络·数据结构·经验分享·笔记·后端
fashion 道格5 小时前
深入理解数据结构:单链表的 C 语言实现与应用
c语言·数据结构
yuuki2332336 小时前
【C语言&数据结构】二叉树的链式递归
c语言·数据结构·后端
智者知已应修善业7 小时前
【51单片机LED贪吃蛇】2023-3-27
c语言·c++·经验分享·笔记·嵌入式硬件·51单片机