1
来分析一个C语言代码结构的设计问题。
这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。
大家觉得,这样的代码设计有没有问题。
代码是某位学员在项目中遇到的,我拿过来给简化了一下。
其实这样的代码可能会导致内存泄漏,如果第一个 malloc 申请成功,第二个 malloc 申请失败,直接 return -1 退出函数,就会导致前面申请的内存没有释放,长期运行,极有可能导致安全隐患。
对于这种连续初始化的代码,一旦某个初始化失败,应该要考虑到如何释放前面已经申请的资源。
最简单的方法,就是在 return 退出之前,把前面的资源清理掉。
不过这种方法,越往下初始化越多,退出的时候需要释放的也就越多,重复的代码也会很多。
或者使用 do while 语句,把代码放在循环里面,初始化失败后,直接跳出循环,不需要再进行下面的初始化,然后统一在某个地方释放资源。
类似的还有 goto 语句,也是把释放资源统一处理。
大家还有没有其他更好的办法,如果你也遇到过,欢迎在评论区交流。
全部0条评论
快来发表一下你的评论吧 !