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

是那样的爱学习

那一刻从入门到入土

丑拒

前言

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

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

小编开始装逼清退后30米

内存错误分类

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

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

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

小编解析看下面

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

小编解析看下面

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

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

这一点还是很简单

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

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

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

数组边界违规

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

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

原文地址:https://www.cnblogs.com/yezibiancheng/p/9275992.html

时间: 2024-11-02 20:50:01

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

seafile看不见repo报500错误的解决方法

环境 seafile-server-6.2.5 centos7.5 1804 现象 seafile服务器所在的VPS没动过,前一天seafile用还好好的,昨天客户端突然不能登录了,显示"服务器内部错误":网页版可以登录,但看不见仓库,显示为红色Error字. 重启服务重启系统都无效,就需要慢慢排查问题了. F12可见好多红色失败请求 登录VPS看日志,根据我的配置, lnmp日志在/home/wwwlogs/目录下 seafile日志在/sharefiles/logs/目录下 都看看

(转)巴斯夏:看得见的与看不见的

醍醐灌顶,豁然开朗. (转自http://www.douban.com/note/241141939/) 巴斯夏:看得见的与看不见的 一个好经济学家与一个坏经济学家之间的区别就只有一点:坏经济学家仅仅局限于看到可以看得见的后果,而好经济学家却能同时考虑可以看得见的后果和那些只能推测到的后果. 看得见的与看不见的 巴斯夏(Claude Frédéric Bastiat) 在经济领域,一个行动.一种习惯.一项制度或一部法律,可能会产生不止一种效果,而是会带来系列后果.在这些后果中,有些是当时就能看到

OSX: 解决10.10 Yosemite Developer Preview 2安装后的Recovery HD看不见的问题

OS X 10.10 Yosemite Developer Preview 2,下面简称10.10DP2,安装之后,有可能出现10.10的恢复盘(Recovery HD)看不见的问题.这是因为它的一个设置错误,下面我们用比较直观的方法来解决它. 这是修复后的启动选项,其中显示的Recovery-10.10 清楚点的 首先,开启磁盘工具的Debug菜单. 无论是从哪个磁盘启动,都可以操作,运行下面命令: defaults write com.apple.DiskUtility DUDebugMen

逃出你的肖申克(五)(六):看不见的牢笼

逃出你的肖申克(五):看不见的牢笼(上)笔记 0. 所谓心理学就是关于人脑如何工作的科学,既然社会是由一个个的人构成,而人的行为很大程度上又由我们的大脑所支配,那么从这个根本上去理解很多问题便非常深入本质. 1.“克拉克第一定律”:“如果一位有名望的老科学家告诉你某件事情是可能的,那么他很可能是对的.然而如果他说某件事情是不可能的,那么他极有可能是错的.” 2.为什么说大多数时候换位思考只是个陷阱.因为真正的换位思考,意味着你必须知道对方大脑中所有真正影响他决策和行为的因素,这包含太多的东西:对

Telnet客户端连接服务器,看不见字符,只显示横线

Telnet 窗口看不见字符,只显示小横线 在用telnet连接tomcat服务器的 时候,窗口中不显示字符,显示成一个一个的横线 解决办法: 按住“Ctrl+]” 回车解决问题

看不见的城市

卡尔维诺的脑子里总是充满着奇思妙想.据说他死后有人从他的脑袋中发现了有别人常人的结构,我宁愿只是相信这只是对一位死去的伟大文学家夸张的褒扬.但是无可否认,这样的奇谈并非空穴来风,如果你读过卡尔维诺的任何一部小说,相信你必定对他书中天马兄空般的想象力拍案叫绝. 在  <我们的祖先>  这部系列中,特征怪异的人行走的每一页的书纸上(一个被分成两半的子爵,以为生活在树上的男爵和一位不存在的铁皮外壳骑士).卡尔维诺将意大利的关荣和历史糅杂在一个童话的世界里,历史乘着想象的翅膀,随着骑士们,贵妇们,爵爷

[ css 深入理解 inline box 模型中line boxes ] css中深入理解line-height(行高)产生的原因:看不见的 line boxes

到底这个line-height行高怎么就产生了高度呢: 在inline box模型中,有个line boxes,这玩意是看不见的,这个玩意的工作就是包裹每行文字.一行文字一个line boxes.例如“艾佛森退役”这5个字,如果它们在一行显示,你艾佛森再牛逼,对不起,只有一个line boxes罩着你:但“春哥纯爷们”这5个字,要是竖着写,一行一个,那真是够爷们,一个字罩着一个line boxes,于是总计五个line boxes.line boxes什么特性也没有,就高度.所以一个没有设置he

不要瞧不起别人的生活,他人也在用你看不见的方式努力

作者:沈善书 我不知道,城市里的穷在你心中是怎样一个概念?或者,你有没有穷过? 在我看见的,城市里的穷就是父母没文化.无业.打零工,身份要么是外来务工者,要么住在城市里的棚户区.他们领低保,住瓦房.木房,将10-30平方米的房间称作“家”,没有格局分明的厨房.卧室.书房.客厅.阳台.卫生间,只有在一个房间里既是卧室,也是厨房,大人和小孩睡觉的地方用一张床单隔开,甚至上厕所都要跑去外面破旧的公厕解决.洗澡的话,夏天站在水龙头边冲洗,冬天则烧一桶水倒在一只大盆子里洗,周围居住环境极其脏乱. 记得20

如果一个控件能看见不能处理事件/创建了一个控件看不见

一: 一个控件能看见 但是点击后没有任何反应的原因如下: 1.当前控件的userInteractionEnabled  = NO; 2.如果当前控件继承自UIControl的Enabled = NO 3.当前控件不在父控件的尺寸边框范围 4.当前控件被一个clearColor的控件挡住了 5.检查父控件的前4种情况 如果一个文本输入框能看见但是无法输入文字可能是如下原因: 当前文本输入框没有在主窗口上(ios6中如果文本框没有在主窗口上面 文本输入框的文字无法输入) 二: 如果创建了一个控件 但