来分析一个C语言代码结构的设计问题。
这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。
大家觉得,这样的代码设计有没有问题。
代码是某位学员在项目中遇到的,我拿过来给简化了一下。
其实这样的代码可能会导致内存泄漏,如果第一个 malloc 申请成功,第二个 malloc 申请失败,直接 return -1 退出函数,就会导致前面申请的内存没有释放,长期运行,极有可能导致安全隐患。
对于这种连续初始化的代码,一旦某个初始化失败,应该要考虑到如何释放前面已经申请的资源。
最简单的方法,就是在 return 退出之前,把前面的资源清理掉。
不过这种方法,越往下初始化越多,退出的时候需要释放的也就越多,重复的代码也会很多。
或者使用 do while 语句,把代码放在循环里面,初始化失败后,直接跳出循环,不需要再进行下面的初始化,然后统一在某个地方释放资源。
类似的还有 goto 语句,也是把释放资源统一处理。
大家还有没有其他更好的办法,如果你也遇到过,欢迎在评论区交流。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7646浏览量
146136 -
代码
+关注
关注
30文章
4976浏览量
74375
原文标题:分析一个隐藏的内存泄漏问题
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
C语言安全编码指南:MISRA C、CERT C、CWE 与 C Secure 标准对比与Perforce QAC应用详解
如何编写真正安全的C语言代码?指南涵盖MISRA C、CERT、CWE等国际安全编码标准对比,以及如何借助Perforce QAC自动检测漏洞。推荐给嵌入式/汽车/工业软件的开发者!
c语言中的代码优化
方式较之中断驱动方式,减小了CPU 对外设的干预,进一步提升了CPU与外设的并行操做程度。程序员
C代码优化方案算法
1、选择合适的算法和数据结构编程
选择一种合适的数据结构
发表于 01-12 09:45
C语言主要特点
。
3.数据类型丰富。C语言提供的数据类型包括整形、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型等,C99又扩充了复数浮点型、超长整型(long long)和布尔类型(b
发表于 01-05 07:41
10个例子代码,C语言结构体的高级
当涉及到C语言结构体的高级**时,有很多有趣和强大的技巧可以应用。下面是10个例子代码,每个例子都使用了不同的高级结构体技术,包括位字段、嵌
发表于 01-05 06:32
C语言和C++之间的区别是什么
(STL),包含多种容器(如vector、list、map等)、算法以及迭代器,极大地提高了开发效率和代码复用性。
而C语言的标准库相对较小,虽然也提供了基本的数据结构(如数组、链表等
发表于 12-11 06:23
C语言的编程技巧
一个成员是一个未知大小的数组,适用于动态分配内存并关联一个可变长度的数组。
3、匿名结构体和联合体:C语言允许在结构体或联合体中定义不带标签的内部
发表于 11-27 06:46
C语言程序的结构
,87LPC764有4KB的Flash ROM,而笔者的程序量只有2KB多点,因而第一个想法是改用C语言作为主要的开发语言,应该不至于导致代码空间不够用。其次,考虑到需要定时功能的模块
发表于 11-26 08:12
C语言特性
1、高效性:直接操作硬件
C 语言代码的执行效率极高,这是其最为显著的优势之一。它能够直接访问硬件资源,与底层硬件进行紧密交互,充分发挥硬件的性能潜力。在嵌入式开发中,硬件资源往往十分有限,对程序
发表于 11-24 07:01
C语言和单片机C语言有什么差异
的目标代码短、运行速度高、存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51
发表于 11-14 07:55
分析C语言代码结构的设计问题
评论