Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的程序中有一个无限循环? int main(无效) { int i; int数组[5]; 对于(i=0;i_C_Arrays_For Loop_Infinite Loop - Fatal编程技术网

C 为什么我的程序中有一个无限循环? int main(无效) { int i; int数组[5]; 对于(i=0;i

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(数组)/

您声明了一个包含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(数组)/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;
}