滴水逆向联盟

标题: 死循环是怎样产生的? [打印本页]

作者: 夺命书生    时间: 2014-11-10 10:14
标题: 死循环是怎样产生的?
本帖最后由 夺命书生 于 2014-11-10 12:40 编辑

死循环是指程序无法退出或者无法进入下一次循环。
那么,什么情况下会产生死循环呢?

C语言中常用的有3中循环语句,这些循环语句都各有特点,while 和 do...while ,经常用在循环次数不确定的场合,
for 经常被用来遍历数值和集合,在使用这些循环语句过程中,若其循环结束条件处理不妥当,则很可能产生死循环。

看下面一个例子:
  1. #include<stdio.h>
  2. void main()
  3. {
  4.         unsigned int i;
  5.         for(i=10;i>=0;i--)
  6.         {
  7.                 printf("%d",i);
  8.         }
  9.         printf("\n");
  10. }
复制代码

程序本意是将每次得到计数变量的输出来,结果由于疏忽导致程序死循环,程序运行结果如下图:




问题分析与解决方法:
for循环的结束条件是,当条件表达式的值为 false ,上面实例中的计数变量被定义为, unsigned  类型。
这样 >=0 就永远成立,所以程序就陷入了死循环。

下面两种是常用的循环语句的判断条件。
1.while  语句的循环结束条件是,当布尔表达式的值为 false 时。
2.do... while 语句的循环结束条件是,当布尔表达式的值为 false 时。
  1. 注意:
  2. 使用 do...while 要注意循环次数的判断,
  3. 因为 do...while 是先执行循环体后再判断
复制代码
解决本例的方法就是将计数变量定义为 int 型,就不会陷入死循环了,程序正常运行结果如图:




在实际的应用开发中,产生死循环的情况比较复杂,并不像本例中的情况,
但归根结底都是由循环结束条件处理不当造成的。



作者: 夺命书生    时间: 2014-11-10 12:39
本帖最后由 夺命书生 于 2014-11-10 12:41 编辑

:lol:lol:lol:lol:lol,其实重要的是,倒数第一句。




欢迎光临 滴水逆向联盟 (http://dtdebug.com/) Powered by Discuz! X3.2