C语言祸根之看不见的错误,那些年学指针从入门到如土都是内存问题

是那样的爱学习

那一刻从入门到入土

丑拒

前言

C 语言程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果,最难受的极大多数时候内存问题看不见,也摸不着。编译正确运行出错,让新手从入门到入土,让老手也头痛不已,花费很多时间进行查找和修复。很多时候最严重的安全问题都是由简单的内存错误造成的,导致软件崩溃,系统崩溃。与内存相关的编程是如此重要,而在实践中正确应用又是如此困难,以致于它支配着面向对象编程语言、功能性编程语言、高级编程语言、声明性编程语言和另外一些编程语言的所有其他变量或理论。因此,出于所有这些原因,需要特别关注 C 的内存问题。让我们看一看如何解决这些问题,先不谈是哪种语言。

小编将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。

小编开始装逼清退后30米

内存错误分类

所有可能存在的实际问题:

对问题很严重,原因却很简单

内存泄漏:在分配资源时会发生内存泄漏,但是它从不回收。

小编解析看下面

您看到问题了吗?除非 Fucntion2对 free释放的内存具有不寻常的响应能力,否则每次对Fucntion1的调用都会泄漏 100 字节。在记忆棒增量分发数兆字节内存时,一次泄漏是微不足道的,但是连续操作数小时后,即使如此小的泄漏也会削弱应用程序

小编解析看下面

fopen的语义需要补充性的 fclose。在没有 fclose的情况下,C 标准不能指定发生的情况时,很可能是内存泄漏。其他资源(如信号量、网络句柄、数据库连接等)同样值得考虑。尤其对于C语言文件操作来说,没有关闭掉文件,很容易造成文件读写失败。

内存错误分配:指针的初始化

这一点还是很简单

这些错误通常也不太严重,稍微对指针概念比较掌握应该是没什么问题的。

悬空指针:野指针(没有指向的指针)

这种情况尤其在C语言链表删除操作常见

数组边界违规

数组边界违规十分危险,它是内存错误管理的最后一个主要类别。如果一个数组大小事100,超过100,则会发生什么情况?回答:难以预料,但是它可能与良好情形相差甚远。特别是,C 复制一个字符串,该字符串不适于为它分配的 100 个字符。在任何常规实现中,“超过的”字符会覆盖内存中的其他数据。内存中数据分配的布局非常复杂并且难以再现,所以任何症状都不可能追溯到源代码级别的具体错误。这些错误通常会导致数百万美元的损失。

我有一个微信公众号,经常会分享一些C语言/C++技术相关的干货;如果你喜欢我的分享,可以用微信搜索“C语言学习部落”关注
欢迎大家加入千人交流答疑裙:627+012+464

posted @ 2018-07-07 00:10  C语言叶子编程  阅读(194)  评论(0编辑  收藏  举报