为什么下面的代码进入无限循环

Why below code goes into infinite loop?

本文关键字:无限循环 代码 为什么      更新时间:2023-10-16

调试为什么下面提到的代码进入无限循环

int a[10]; 
int i; 
for(i=0;i<=10;i++) { 
   a[i]=0; 
}

我无法找到任何有效的解释。虽然一种可能性是[9]指向我...,但似乎并不令人信服

"缓冲区溢出"的经典副作用。在这种情况下,发生的事情是我的价值被覆盖。检查变量a的范围是10个字节0到9的数组。但是,循环为11个字节0到10。

将循环更改为

int a[10]; 
int i; 
for(i=0;i<10;i++) { 
   a[i]=0; 
}

它不会进入无限循环。同样,这是" 缓冲区溢出"的问题,并且可能具有不确定的行为。在您的情况下,未定义的行为是无限循环。

i的值等于10

 a[i]=0;

通过一个访问权限。它调用不确定的行为。一切都可能发生。

此代码具有未定义的行为。但是,如果它进入无限循环,最合适的解释是a[10] = 0用0覆盖i,因为ia之后立即定义,因此,在存储器中,最有可能将其放置在阵列元素之后的连续元素。

您可以尝试一下,以免获得不确定的行为:

int i, a[10];
for(i = 0; i <= 9; i++) 
    a[i]=0;