C 为什么我的程序中有一个无限循环? int main(无效) { int i; int数组[5]; 对于(i=0;i
您声明了一个包含5个元素的数组,但向其中写入了21个元素。超过数组末尾写入会导致未定义的行为。在您的情况下,您正在向循环计数器C 为什么我的程序中有一个无限循环? int main(无效) { int i; int数组[5]; 对于(i=0;i,c,arrays,for-loop,infinite-loop,C,Arrays,For Loop,Infinite Loop,您声明了一个包含5个元素的数组,但向其中写入了21个元素。超过数组末尾写入会导致未定义的行为。在您的情况下,您正在向循环计数器i,将其重置为0,可能是在分配数组[5]时 如果要修复程序,请更改循环以写入正确数量的元素 int main(void) { int i; int array[5]; for (i = 0; i <= 20; i++) array[i] = 0; return 0; } int num_elems=sizeof(数组)/
i
,将其重置为0,可能是在分配数组[5]
时
如果要修复程序,请更改循环以写入正确数量的元素
int main(void)
{
int i;
int array[5];
for (i = 0; i <= 20; i++)
array[i] = 0;
return 0;
}
int num_elems=sizeof(数组)/sizeof(数组[0]);
对于(i=0;i
您正在通过覆盖超出允许内存的内容来调用未定义的行为。因此,任何事情都可能发生
最有可能的情况是,它覆盖了循环计数器。问题在于,当您试图访问数组边界之外的元素时,该元素只有5大,但在一个21大的循环中
int num_elems = sizeof(array) / sizeof(array[0]);
for (i = 0; i < num_elems ; i++)
int main(无效)
{
int i;
int数组[5];
对于(i=0;i<5;i++)
数组[i]=0;
返回0;
}
我看不到任何无限循环条件,但在一个有5个“插槽”的数组上设置了20个值???以下是给定代码中发生的情况
int main(void)
{
int i;
int array[5];
for (i = 0; i < 5; i++)
array[i] = 0;
return 0;
}
#包括
#包括
内部主(空)
{
int i;
int数组[5];
对于(i=0;我堆叠涂鸦…但祝贺你!你写了一个5行程序,什么都不做,却运行了很长一段时间!向下投票者-向下投票者-当问题写得不好或不遵守网站规则时使用,而不是针对琐碎的问题!这个问题可能重复。示例代码和地址记录是一个很好的方法一个小点——堆栈上项目之间的偏移量是在编译时决定的,而不是在运行时。堆栈帧的布局(i和数组都在堆栈上)是由编译器决定的
#include<stdio.h>
#include<string.h>
int main(void)
{
int i;
int array[5];
for (i = 0; i <= 20; i++)
{
printf("%p %p \n",&i,&array[i]);
printf("the value of i is %d \n",i);
sleep(1);
array[i] = 0;
printf("i may be modified here lets see what i is %d \n", i);
}
return 0;
}