来福网

死循环

死循环(英语:infinite loop)或称为无限循环,是指程序的控制流程一直在重复执行某一段代码,无法结束的情形,其原因可能是因为程序中的循环没有设结束循环条件,或是结束循环的条件不可能成立等。在合作式多任务(cooperative multitasking)的操作系统中,死循环会使系统没有反应,若是先占式(preemptive)多任务的系统中,死循环会用掉所有可用的处理器时间,不过可以由使用户结束程序。死循环是造成系统假死机的原因之一,其他的可能原因包括死锁或是存储器区段错误。

忙碌等待循环是在外界特定条件时(例如有按键输入)才会离开的循环,有时忙碌等待循环也被称为是死循环,但此情形和上述的不太一样。忙碌等待循环可以借由外界事件而结束循环,但上述的死循环是无法结束的。

循环是指程序可能会重复执行的某一组指令,若重复执行,在特定条件成立后才会结束,若因为循环的特性,造成特定条件无法满足,就会形成死循环。

有些情形下程序会蓄意产生死循环。例如早期使用ROM匣的游戏,在主程序的循环是死循环,没有结束条件,原因是一般主程序若不执行时,系统控制权是交由操作系统,但这类游戏没有操作系统,因此让主程序为死循环,程序会一直执行到断电为止。

现在许多的电脑交互系统需要定期的监控用户的输入或是设备的活动,因此当系统闲置时,仍然会在死循环中执行,直到系统被重置或断电为止。像在阿波罗计划导航用的电脑中,程序的最外层是死循环,若完全没有其他工作要进行时,电脑会关闭“电脑运作中”的指示灯号。

若程序中的死循环是无意产生的,也就是程序错误。新手程序员常常会出现这种错误,但在资深程序员身上也有可能发生,而且错误的原因可能相当微妙,因此不容易调试。

例如程序员想要从收集链表中所有的资料,因此会依链表依序前进,直到链表的尾端为止,但若程序未考虑链表可能是循环链表,在循环链表中依序前进的程序,反而会移动到链表较前面的部分,此时就会变成死循环。

大部分的死循环可以借由详细的的代码查看而找出,不过没有通用的方式可以判断程序是否会结束,或者会永远执行(也就是死循环)。判断程序会结束或会永远执行的问题称为停机问题,而英国计算机科学家艾伦·图灵证明了没有停机问题的通用算法。

以下是一些死循环的例子。

C语言的死循环:

#include stdio.hmain(){ while(1) { printf("Infinite Loopn");//顯示"Infinite Loop"字串 }}

后台-插件-广告管理-内容底部广告位PC端
后台-插件-广告管理-内容底部广告位手机端

相关推荐

评论

全部评论