• cJson堆内存释放问题


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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
  • 相关阅读:
    条款33、避免遮掩继承而来的名称
    写个rpc调用,试试自己了解多少
    vite vite.config.js中的配置
    单点故障解决方案之Smart Link与Monitor Link
    MES管理系统中,物料BOM为何如此重要
    DataGrip 无法连接mysql 错误[08001]
    3.事务篇【mysql高级】
    数据仓库概念
    u-boot对设备树的支持__传递dtb给内核
    把setting.xml放在conf和.m2目录的区别
  • 原文地址:https://blog.csdn.net/lljss1980/article/details/133798934