CJS的一个问题-必须free

static void askinfo(int fd, uint8_t sn, uint16_t len, uint8_t *data) {NEVERSHOW
    char *outStr;
    char *mac=NULL,*devId=NULL,*ptype=DESIGN_DEV_TYPE,*pmodel=DESIGN_DEV_MODLE,*pcategory=DESIGN_DEV_CATEGORY,*psoftwareVersion=DESIGN_DEV_SW_VERSION ;
	
    serverAddrType *ipport=NULL;
    char port[5]={0};
    config.read(CFG_MQTT_TCPADDR , (void **)&ipport );
    sprintf(port,"%d",ipport->port);
    config.read(CFG_MQTT_DEVID ,   (void **)&devId);
	config.read(CFG_MQTT_MAC ,     (void **)&mac );
    cJSON *root = NULL,*rroot = NULL;
    root =  cJSON_CreateObject();
    rroot =  cJSON_CreateObject();
  //  cJSON_AddStringToObject(root,"category", pcategory);
    cJSON_AddStringToObject(root,"type", ptype);
    cJSON_AddStringToObject(root,"model", pmodel);
    cJSON_AddStringToObject(root,"mac",    mac);
    cJSON_AddStringToObject(root,"devId",  "");
    cJSON_AddStringToObject(root,"devName", "");
    cJSON_AddStringToObject(root,"sn", "");
    cJSON_AddStringToObject(root,"productKey", "");
    cJSON_AddStringToObject(root,"softwareVersion","V3.0.0");
    if(ipport==NULL)
    {
        printf("【ipport==NULL】\r\n");
        cJSON_AddStringToObject(root,"host", "");
        cJSON_AddStringToObject(root,"port", "");
    }
    else
    {
        cJSON_AddStringToObject(root,"host", (char*)ipport->ip);
        cJSON_AddStringToObject(root,"port", port);
    }

    cJSON_AddItemToObject(rroot, "data", root);//把root放到rroot里面 嵌套
    outStr = cJSON_Print(rroot);
    cJSON_Delete(rroot);

    printf("strlen(outStr)=%d outStr 【%s】\r\n",strlen(outStr),outStr);
    tslSendData(fd, sn+1, (uint8_t *)outStr, strlen(outStr));

    free(outStr);
    //cJSON_Delete(root);不能有
}

 

 

不然你就赶紧奇怪 怎么del还可用呢

 

 

+++++++++++++++++++++++++++++++++++++

我们在 运行  p=cJSON_Print(root);   
 后务必要要进行如下释放操作

cJSON_Delete(root);   

free(p)

关于free这点特别加粗注意,我被这个问题困扰两天,默认网上的介绍都是这样写的,编译代码也没要出现错误。

其实不对的,应该使用myfree(p); 这个函数才能给真正释放内存,要不然程序跑几分钟就卡死了,这个特别要注意。喜欢做验证的朋友可以自己测试下。

这问题不容易发现,我几乎快放弃cjson了。还好最后解决了。
————————————————
版权声明:本文为CSDN博主「penglijiang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/penglijiang/article/details/52831080

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值