博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cJSON填坑记
阅读量:6822 次
发布时间:2019-06-26

本文共 799 字,大约阅读时间需要 2 分钟。

1. 艰辛的过程

最近做了一个嵌入式的项目,需要与服务器进行连接。为了方便服务器处理数据,经商定后统一采用JSON形式进行数据的传输。

以前没有用过JSON格式进行数据处理,所以上网搜索了一下,很多人推荐使用Dave Gamble的cJSON,然后下载到了:

开始使用,觉得很爽!

洋洋洒洒写了近万行的代码,调试过后,没发现明显bug,心里很乐呵,觉得自己coding老牛逼了!

剧情到这里翻转了~~~~~~

  1. 代码跑着跑着,发现内存一直在持续攀升
  2. 内存达到一定的数字,程序莫名其妙的卡死了

各种找bug,各种调试,甚至开始一行行的注释掉代码,每次复现bug需要跑一两个小时不等,就这么被痛苦的折磨了三天,能用的方法几乎用遍了,什么mtrace,什么gdb,什么打log,每次卡死的地方都不同,感觉自己不爱了!

最终实在是没有办法了,我知道是内存泄漏了,但是就是不能定位到底是哪里泄漏了,感觉每次New之后都delete了,链表也循环释放了,没天理了!

2. Bug定位

抱着死马当活马医的心态,我通读了cJSON代码,终于发现了错误,只是因为少看了一行注释!

mark

原来,cJSON_Print也是分配内存的,需要手动去释放掉,唉!

解决内存泄漏问题,继续跑,发现程序还是卡死,奇怪了!

继续查,终于发现了,做了一个定时函数,定时发送状态信息给server,发就发呗,关键发送的时候同样调用了cJSON_CreateObject函数,里面可是有malloc的啊!

mark

mark

改正,继续运行,问题解决!

3. 结论教训

  1. 使用网络开源代码,一定要注意别人写的注释,说不定一不小心你就掉坑里了
  2. 中断处理函数中,一定不要使用malloc/free new/delete 等一些耗时的系统函数,不然后续肯定会死的很难看

转载于:https://www.cnblogs.com/Jimmy1988/p/9629867.html

你可能感兴趣的文章
Codeforces Round #363 (Div. 2)
查看>>
HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8
查看>>
日期操作
查看>>
angularjs中ng-repeat-start与ng-repeat-end用法实例
查看>>
linux centos6.5 安装gcc-c++时出现 yum install gcc-c++ cannot find a valid baseurl for repo...
查看>>
Jsp动态生成表格
查看>>
MongoDB环境配置
查看>>
5_4 calvc
查看>>
Educational Codeforces Round 36 (Rated for Div. 2)
查看>>
深入理解javascript原型和闭包——从【自由变量】到【作用域链】
查看>>
java多线程
查看>>
Codevs1029 遍历问题
查看>>
远程连接提示“为Administrator连接到现存会话发生错误(Id 0).操作成功”
查看>>
nginx配置ssl证书
查看>>
fastjson SerializerFeature详解
查看>>
spring源码读书笔记
查看>>
HDOJ-1015 Safecracker 【DFS】
查看>>
读书笔记-->Java经典编程300例--明日科技--清华大学出版社(第一版)
查看>>
如何在存储过程中自动添加分区
查看>>
[并查集] POJ 1611 The Suspects
查看>>