cJSON填坑记
1. 艰辛的过程
最近做了一个嵌入式的项目,需要与服务器进行连接。为了方便服务器处理数据,经商定后统一采用JSON形式进行数据的传输。
以前没有用过JSON格式进行数据处理,所以上网搜索了一下,很多人推荐使用Dave Gamble的cJSON,然后下载到了:
开始使用,觉得很爽!
洋洋洒洒写了近万行的代码,调试过后,没发现明显bug,心里很乐呵,觉得自己coding老牛逼了!
剧情到这里翻转了~~~~~~
- 代码跑着跑着,发现内存一直在持续攀升
- 内存达到一定的数字,程序莫名其妙的卡死了
各种找bug,各种调试,甚至开始一行行的注释掉代码,每次复现bug需要跑一两个小时不等,就这么被痛苦的折磨了三天,能用的方法几乎用遍了,什么mtrace,什么gdb,什么打log,每次卡死的地方都不同,感觉自己不爱了!
最终实在是没有办法了,我知道是内存泄漏了,但是就是不能定位到底是哪里泄漏了,感觉每次New之后都delete了,链表也循环释放了,没天理了!
2. Bug定位
抱着死马当活马医的心态,我通读了cJSON代码,终于发现了错误,只是因为少看了一行注释!

原来,cJSON_Print也是分配内存的,需要手动去释放掉,唉!
解决内存泄漏问题,继续跑,发现程序还是卡死,奇怪了!
继续查,终于发现了,做了一个定时函数,定时发送状态信息给server,发就发呗,关键发送的时候同样调用了cJSON_CreateObject函数,里面可是有malloc的啊!


改正,继续运行,问题解决!
3. 结论教训
- 使用网络开源代码,一定要注意别人写的注释,说不定一不小心你就掉坑里了
- 中断处理函数中,一定不要使用malloc/free new/delete 等一些耗时的系统函数,不然后续肯定会死的很难看
cJSON填坑记的更多相关文章
- UiAutomator2.0升级填坑记
UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...
- Android项目开发填坑记-Fragment的onBackPressed
Github版 CSDN版 知识背景 Fragment在当前的Android开发中,有两种引用方式,一个是 Android 3.0 时加入的,一个是supportV4包中的.这里简称为Fragment ...
- Android项目开发填坑记-Fragment的onAttach
背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...
- Android项目开发填坑记-so文件引发的攻坚战
故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...
- minikube windows hyperx填坑记
minikube windows hyperx填坑记 安装了一天半,还是没行,先放弃 开始 minikube start --vm-driver=hyperv --hyperv-virtual-swi ...
- 浅谈html5 video 移动端填坑记
这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...
- Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...
- Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)
简介 无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的.别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹.因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,这些坑和你 ...
- Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记
公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...
随机推荐
- shell脚本中跳转另一台主机执行命令 <<EOF
ssh vmuser@ <<EOFmkdir /home/vmuser/xunjianrm /home/vmuser/xunjian/xj.logtouch /home/vmuser/xu ...
- VsCode编写和调试.NET Core
本文转自:https://www.cnblogs.com/Leo_wl/p/6732242.html 阅读目录 使用VsCode编写和调试.NET Core项目 回到目录 使用VsCode编写和调试. ...
- Notes : <Hands-on ML with Sklearn & TF> Chapter 1
<Hands-on ML with Sklearn & TF> Chapter 1 what is ml from experience E with respect to som ...
- maya2014卸载/安装失败/如何彻底卸载清除干净maya2014注册表和文件的方法
maya2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2014失败提示maya2014安装未完成,某些产品无法安装,也有时候想重新安装maya ...
- cad2012卸载/安装失败/如何彻底卸载清除干净cad2012注册表和文件的方法
cad2012提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2012失败提示cad2012安装未完成,某些产品无法安装,也有时候想重新安装cad2012 ...
- [CocoaPods]终端方式加载第三方库
终端方式集成第三方库 1.打开终端,转到当前工程所在的文件夹. 方式一: [访达]->[服务]->[系统偏好设置] ->勾选[新建位于文件夹位置的终端标签 ]和[新建位于文件夹位置的 ...
- MySQL mysqlbinlog 访问mysql-bin日志出错
问题 mysqlbinlog -v -v --base64-output=DECODE-ROWS mysql-bin.000166 | less ERROR: Error in Log_event:: ...
- typescript 的安装
1.全局安装 typeScript 包 npm install typescript -g (tsc -v 查看ts版本)2.解决模块的声明文件问题 npm install @type ...
- [宏]__stringify
Linux内核中有如下两个宏: #define __stringify_1(x...) #x #define __stringify(x...) __stringify_1(x) 写代码测试如下: # ...
- python买卖股票的最佳时机--贪心/蛮力算法简介
开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...