为什么程序会崩溃

4.1.1 为什么程序会崩溃

第4章 程序崩溃处理

有人说C语言是低级语言。这一部分是因为应用程序的内存管理大部分需要由程序员来实现。虽然这种方法非常有用,但是也给程序员增加了很多麻烦。

也有人说,C语言是相对较小且容易学习的语言。然而,只有不考虑标准C语言库的典型实现时,C语言才比较小。这个库相当庞大,很多程序员认为C语言是易用语言,那是因为他们还没有遇到指针。

一般而言,程序错误会导致下面两件事之一的发生。

导致程序做一些程序员没有打算做的事。这样的程序错误通常因为逻辑缺陷,比如在第3章的数字排序程序中,将节点放在了树的错误分支上。到目前为止我们集中介绍了这种程序错误。

导致程序'爆炸'或'崩溃'。这些程序错误通常与指针的误操作或误用有关。这是本章将介绍的程序错误类型。

4.1 背景资料:内存管理

当程序崩溃时到底发生了什么事?我们这里将解释一下,并找出它与产生崩溃的程序错误有什么关系。

4.1.1 为什么程序会崩溃

用编程界的行话说,当某个错误导致程序突然和异常地停止执行时,程序崩溃。迄今最常见的导致程序崩溃的原因是试图在未经允许的情况下访问一个内存单元。硬件会感知这件事,并执行对操作系统(OS)的跳转。在本书主要使用的Unix系列的平台上,操作系统一般会宣布程序导致了段错误(seg fault),并停止程序的执行。在微软的Windows系统上,对应的术语是一般保护错误(general protection fault)。无论是哪个名称,硬件都必须支持虚拟内存,而且操作系统必须使用虚拟内存才会发生这个错误。虽然这是如今的通用计算机的标准,但是读者应记住,专用的小型计算机一般没有这种情况,比如用来控制机器的嵌入式计算机。

为了有效地使用GDB/DDD处理段错误,重要的是要真正理解内存访问错误是如何发生的。在下面几页中,我们将提供关于虚拟内存(VM)在程序执行期间所起作用的简要教程。我们将把焦点放在虚拟内存问题与段错误之间的关系上。因此,即使在计算机课程中学习过虚拟内存,本节介绍的内容仍然可以提供有助于处理调试工作中的段错误的信息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值