首页 > 自考资讯 > 自考知识

数组越界会导致无限循环吗?

2024-08-26

其实数组越界会导致无限循环吗?的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享数组越界会导致无限循环吗?的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

#include stdio.hint main() { int i, a[5]; for (i=0; i=30; i++) { a[i]=0; printf('%d:hello\n', i); printf('%d:hello world', i);返回0;}A.三十行i:hello (i[0,30]) 和一行30:hello world

B. 三十行i:hello(i[0,30]) 和一行31:hello world

C. 多行i:hello(i[0,30])

D. 多行i:hello(i[0,31])

以下是程序运行结果

答案很明显,就是C,就会有多行i:hello(i[0,30]),但是为什么会出现这种情况呢?我们在程序中添加一条辅助语句,打印出i和a的地址

数组越界会导致无限循环吗?

查看运行结果

我们可以清楚地发现,i的地址和数组a的第一个元素的地址只相差20,20=4 * 5,正好是5个整数的大小,所以当循环到i=6时,a[ 6]=0,此时a[6]也是i,因为它们的地址相同。此时i重新赋值为0,循环又回到起点,导致无限循环。

补充:

堆栈从高地址指向低地址,如下:

高地址|我|一个[4] |一个[3] |一个[2] |一个[1] |一个[0] |低地址

有些编译器会做优化,在数组和i之间留下内存间隙,所以i具体能让循环正常退出的条件并不确定,但可以肯定的是,如果i严重越界,比如不小心给了30,仍然会导致死循环。我的编译器没有优化,所以会出现多行i:hello(i[0,4])的无限循环。

用户评论

栀蓝

数组越界可能会导致程序崩溃,但不会导致无限循环。无限循环通常是由其他逻辑错误导致的。

    有15位网友表示赞同!

何必锁我心

不会吧,数组越界应该会直接报错,怎么可能会无限循环呢?

    有20位网友表示赞同!

将妓就计

数组越界会导致程序异常,比如 Segmentation fault,跟无限循环没啥关系。

    有15位网友表示赞同!

迷路的男人

这问题有意思,数组越界通常会导致程序崩溃,跟无限循环好像没什么联系。

    有19位网友表示赞同!

凉笙墨染

数组越界和无限循环之间应该没有直接联系,可能你代码里还有其他问题。

    有6位网友表示赞同!

安好如初

数组越界一般会导致程序直接报错,除非你的程序设计得很奇葩才会导致无限循环。

    有8位网友表示赞同!

墨城烟柳

数组越界会导致程序崩溃,无限循环可能是其他地方的逻辑问题。

    有5位网友表示赞同!

你是梦遥不可及

一般来说,数组越界会直接导致程序崩溃,不太可能引发无限循环。

    有15位网友表示赞同!

苏樱凉

数组越界通常会引发异常,导致程序终止,不会导致无限循环。

    有9位网友表示赞同!

孤岛晴空

数组越界会导致程序异常,跟无限循环应该没有直接关联。

    有12位网友表示赞同!

你瞒我瞒

数组越界应该会直接导致程序出错,不会导致无限循环。

    有20位网友表示赞同!

墨城烟柳

数组越界一般会导致程序崩溃,跟无限循环没关系。

    有18位网友表示赞同!

人心叵测i

数组越界不会直接导致无限循环,可能是你的程序逻辑有误。

    有7位网友表示赞同!

爱你的小笨蛋

数组越界会导致程序异常,不会导致无限循环,可能是你程序设计问题。

    有11位网友表示赞同!

在哪跌倒こ就在哪躺下

数组越界会直接导致程序崩溃,不会导致无限循环,可能你的程序其他地方有问题。

    有8位网友表示赞同!

我怕疼别碰我伤口

数组越界会导致程序错误,不会导致无限循环,可能是你的程序逻辑错误。

    有8位网友表示赞同!

铁树不曾开花

数组越界一般不会导致无限循环,可能你的程序其他地方有bug。

    有16位网友表示赞同!

雨后彩虹

数组越界会导致程序异常,跟无限循环关系不大。

    有10位网友表示赞同!

心亡则人忘

数组越界通常会导致程序终止,不太可能引发无限循环。

    有12位网友表示赞同!

十言i

数组越界不会直接导致无限循环,可能你的程序逻辑有问题。

    有10位网友表示赞同!

猜你喜欢