为什么当C中发生数组越界时我的程序没有进入无限循环

2023-12-01

int main(){
   int i;
   int arr[4];
   for(int i=0; i<=4; i++){
      arr[i] = 0;
   }
   return 0;
}
  1. 我在youtube上看了CS107(第13讲)的一个视频,其中展示了这个例子,并通过内存图告诉了为什么上面的程序会导致无限循环。 arr[4] 超出范围,应该导致存储 i 的地址并将 i 的值更改回 0,从而导致无限循环。但是当我尝试使用 gcc 编译器在我的 mac 上运行它时,for 循环执行了 5 次(通过插入 printf 检查)。即 i 的值 = 0,1,2,3,4。

当存在未定义的行为时,您不能期望单个或特定的行为。什么事情都可能发生。
该视频中所说的只是未定义行为的多种可能性之一,而您所得到的是另一种可能性。一个人不应该依赖任何特定的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当C中发生数组越界时我的程序没有进入无限循环 的相关文章

随机推荐