当前位置: 首页 > news >正文

建一个网站难不难包头建设安全协会网站

建一个网站难不难,包头建设安全协会网站,谷歌seo网站推广怎么做优化,网站备案管理系统网站文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么#xff1f; cJSON开源库地址#xff1a; cJSON 一、堆内存不足 1.1 问… 文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么 cJSON开源库地址 cJSON 一、堆内存不足 1.1 问题描述 这是大家遇到最多的问题之一在Keil5中给STM32F103ZET6默认分配的堆大小是0x200在数据量比较大的时候容易出现内存溢出错误。如果数据量不大那么无所谓但是数据量大了就到出现堆内存爆满。 1.2 解决办法 修改堆大小找到.s文件再找到堆大小将0x200修改为0xf00这个数根据需求定。 二、内存泄露 2.1 忘记Delete 在使用cJSON_Parse()函数解析json数据后我们需要释放掉这个函数所申请的内存因为设计到json嵌套的问题所以需要使用cJSON库中的释放函数cJSON_Delete()函数 使用示例 rootcJSON_Parse(data); if(root ! NULL) {/*对root进行进一步解析*/cJSON_Delete(root); } 2.2 忘记Free 在github主页可以看到这段话使用cJSON_Print()这个函数打印json数据会申请一块内存在使用完这个函数后你有义务释放掉这个函数所申请的内存。 使用示例 char *json_string cJSON_Print(item); if (json_string) {printf(%s\n, json_string);free(json_string);//1.5版本以上也可以使用以下函数进行释放//cJSON_free(json_string);}2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题) 由于return造成的惨痛的教训 *有问题的代码 // //函 数 名pid_parameter_change //功 能接收字符串格式化为JSON格式解析其中pid数据并修改对应pid结构体 //输入参数字符串指针pid结构体指针 //返 回 值0表示解析成功1表示解析错误 // uint8_t pid_parameter_change(const char *data,PID *pid) {cJSON *rootNULL;cJSON *kpNULL,*kiNULL,*kdNULL;float p,i,d;rootcJSON_Parse(data);if(root!NULL){/* 解析Kp */kpcJSON_GetObjectItem(root,kp);if(kp NULL) return 1;else pcJSON_GetNumberValue(kp);/* 解析Ki */kicJSON_GetObjectItem(root,ki);if(ki NULL) return 1;else icJSON_GetNumberValue(ki);/* 解析Kd */kdcJSON_GetObjectItem(root,kd);if(kd NULL) return 1;else dcJSON_GetNumberValue(kd);/* 修改PID参数 */pid-Kpp;pid-Kii;pid-Kdd;printf(%p\r\n,root);cJSON_Delete(root);rootNULL,kpNULL,kiNULL,kdNULL;return 0;}else{cJSON_Delete(root);rootNULL;return 1; //root数据JSON格式化失败} }*修改后的代码 // //函 数 名pid_parameter_change //功 能接收字符串格式化为JSON格式解析其中pid数据并修改对应pid结构体 //输入参数字符串指针pid结构体指针 //返 回 值0表示解析成功1表示解析错误 // uint8_t pid_parameter_change(const char *data,PID *pid) {cJSON *rootNULL;cJSON *kpNULL,*kiNULL,*kdNULL;float p,i,d;if(data[0] { data[UART1_Rx_cnt-3] } ){rootcJSON_Parse(data);if(root){/* 解析Kp */kpcJSON_GetObjectItem(root,kp);if(kp NULL) { cJSON_Delete(root);return 1;}else pcJSON_GetNumberValue(kp);/* 解析Ki */kicJSON_GetObjectItem(root,ki);if(ki NULL) { cJSON_Delete(root);return 1;}else icJSON_GetNumberValue(ki);/* 解析Kd */kdcJSON_GetObjectItem(root,kd);if(kd NULL) { cJSON_Delete(root);return 1;}else dcJSON_GetNumberValue(kd);/* 修改PID参数 */pid-Kpp;pid-Kii;pid-Kdd;/*删除JSON否则可能会发送内存泄露*/cJSON_Delete(root);rootNULL,kpNULL,kiNULL,kdNULL; // 释放掉的内存指向NULL避免产生野指针return 0;}else{/*删除JSON否则可能会发送内存泄露*/cJSON_Delete(root);rootNULL;return 1; //root数据JSON格式化失败} }else{return 1;} }问题分析 这个问题的根源是由于串口接收到的数据不全导致的同时也有我代码不严谨的问题。 在有问题的那个代码中使用cJSON_Parse()成功解析出数据使得代码进入了if语句中 if(root) 进入if语句后再次判断json对象是否有ki这个元素 这个时候出现了问题由于串口接收缺少了ki中的i这个字符使得if语句判断结果未false直接return了。 if(ki NULL) . 注意return之前我没有使用cJSON_Delete()删除root所以出现了内存泄露 写代码的时候没考虑到cJSON_Parse()成功后解析不出json对象中的元素的问题 2.4 内存泄露在Cortex-M3内核会发生什么 未完待续…
http://www.pierceye.com/news/558658/

相关文章:

  • 申请域名后怎么做网站网站建设与维护中国出版社
  • 洛阳做网站那家好课程网站建设开题报告
  • 到哪里建网站商务网站建设学期总结
  • 铜陵app网站做营销招聘网站开发公司需要投入什么资源
  • 建购物的网站需要多少钱wordpress不显示头像
  • 如何做一个个人网站长春网站建设wang
  • 湖南省做网站的网站资讯建设
  • 滨江网站建设制作如何建设网站方便后期维护
  • dedecms手机网站插件wordpress模板中文
  • 网站建设合同封面模板下载天津专业网站设计
  • 毕业设计网站做几个2345浏览器网页版
  • 南阳市网站建设国家建设协会工程质量分会网站
  • 苗木网站开发需求自己做网站转发新闻违法么
  • 招商网站建设解决方案wordpress页面转移
  • 门户网站开发方案文档做网站切片
  • 中国房地产新闻关键词seo排名优化如何
  • 网站大型网页游戏上海装修公司排名统帅
  • hostinger建站wordpress互联网营销方案策划
  • 门户网站维护方案杭州网站建设公司哪家好
  • 深泽网站建设在wordpress加入文件管理器
  • 国外社交网站建设福州市工程建设质量管理网站
  • 建设网站怎样分配给用户空间做网站优化有什么方法
  • 做计算机网站有哪些内容nodejs做网站容易被攻击吗
  • 咖啡店网站模板免费图表制作网站
  • 织梦瀑布流网站模板爱站网关键词
  • 网站运营需要什么条件网站建设开发公司微信公众号开发
  • 国外购买域名网站计算机网站建设论文总结
  • 杭州高端设计网站建设大学生个人简历电子版
  • 北京旅游外贸网站建设手机制作手书app软件
  • 响应式网站 分辨率泉州教育网站