嵌入式C语言中动态内存使用常见错误与预防

常见错误与预防
1 分配后忘记释放内存
void func(void){ p = malloc(len); do_something(p); return; /*错误!退出程序时没有释放内存*/}    预防:编写代码时malloc()和free()保证成对出现,避免忘记资源回收。int func(void){ p = malloc(len); if (condition) return -1; /*错误!退出程序时没有释放内存*/ free(p); return 0;}    预防:一旦使用动态内存分配,请仔细检查程序的退出分支是否已经释放该动态内存。 2 释放内存调用错误指针
void func(void){ p = malloc(len); val = *p++; /*错误!动态内存句柄不可移动*/ free(p);}    预防:千万不要修改动态内存句柄!可以另外赋值给其他指针变量,再对该动态内存进行访问操作。 3 分配内存不够导致溢出
void func(void){ len = strlen(str); p = malloc(len); strcpy(p, str); /*错误!str的’’写到动态内存外*/}    预防:分配内存前仔细思考长度是否足够,千万注意字符串拷贝占用内存比字符串长度大1。
  自动查错机制  
   尽管在开发过程中坚守原则和谨慎编程甚至严格测试,然而内存泄露的错误还是难以杜绝,如何让系统自动查出内存泄露的错误呢?     一种比较好的方法是建立日志块,即每次分配内存时记录该内存块的指针和大小,释放时再去除该日志块,如果有内存泄露就会有对应的日志块记录这些内存没有释放,这样就可以提醒程序员进行查错。    


锂电池如何修复呢?
智能云科通过互联网+更有效实现创新资源共享 推动经济转型升级
基于 CPU 的 OpenCL 实现案例解析
电话机器人是如何实现与人对话的
国芯思辰低功耗25MSPS双通道模数转换器GAD2263可用于热成像仪中
嵌入式C语言中动态内存使用常见错误与预防
大众2021年就能靠电动车盈利 新车的盈利能力将达到高尔夫的水平
魅蓝再见,再也不见?
未来新能源汽车将进入双线“作战”局面
边境防御,无人机反制系统大放光彩
RJ45以太网接口电路设计
2020年10月国内手机市场运行分析报告
DSEP60-12A/STTH6012快恢复二极管的基础资料
各类传感器知识的入门介绍
华为表示并没有推迟和减产手机的产量
全球晶圆代工厂排名
Web前端性能优化思路
桶外搅拌混合器搅拌流场仿真分析
由负-12V电源获得3.3V输出的电路
你知道人体识别吗,ReID技术了解一下