OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2644|回复: 2

STM32F1多次解析json后死机

[复制链接]

17

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2019-3-26
在线时间
105 小时
发表于 2020-3-6 03:50:17 | 显示全部楼层 |阅读模式
10金钱
网上有人说把Heap_Size调大,我把它调成0xC00后运行四次就死机了,调成0x4000后运行十次左右死机,总不能无限制的往上调吧?我怀疑不是Heap_Size的问题,感觉可能是我内存释放方面的原因,我这里解析了一个大的json后,又从中分离出了第二级、第三级的json,希望大家看看哪里出了问题。
void json_parse()
{
        cJSON *root,*result,*data1,*data2,*data3;
        char *datatime;
        int tempval;
       
        root=cJSON_Parse(pszjsontext);//文本转化成json结构体

        result=cJSON_GetObjectItem(root, "data");//在root中继续分离出一个节点

        data1=cJSON_GetObjectItem(result, "datastreams");//在result中继续分离一个节点
       
        datastreams=cJSON_Print(data1);//将分离出的新节点转成字符串;
        deletechar(datastreams,'[');
        deletechar(datastreams,']');//去掉中括号

        data2=cJSON_Parse(datastreams);//去掉中括号后再次打包成json文本
        data3=cJSON_GetObjectItem(data2, "datapoints");//继续分离一个新节点
        tempval=cJSON_GetObjectItem(data3, "value")->valueint;//分离出value的值
        printf("%d\r\n",tempval);//显示数值

        cJSON_Delete(root);//删除根节点
      //free(datastreams);
}

加上最后一行注释掉的代码后,运行次数又增加好多,真是神奇,想不明白,求解答

最佳答案

查看完整内容[请看2#楼]

free(datastreams);替换成cJSON_free(datastreams);吧 ,你移植的时候free应该重定义了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-12-4
在线时间
717 小时
发表于 2020-3-6 03:50:18 | 显示全部楼层
free(datastreams);替换成cJSON_free(datastreams);吧 ,你移植的时候free应该重定义了
回复

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-12-4
在线时间
717 小时
发表于 2020-3-6 14:10:31 | 显示全部楼层
cJSON_Print里面有申请内存  所以最后 //free(datastreams);不要注销,  cJSON_Parse也会申请内存所以 data2也要删除
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 08:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表