【问题标题】:unexpected infinite loop array c意外的无限循环数组 c
【发布时间】:2015-09-23 12:43:22
【问题描述】:

我正在自学编程。我遇到了数组并试图将 for 循环的条件从 i

#include <stdio.h>

int main(void)
{
    int a[5] , i , j = 0;
    for (i=0;i<=5;i++)
    {
        a[i] = 2;
        printf("%d " , a[5]);
    }
    return 0;
}

我再次尝试了相同的方法,但这次使用变量,但这次没有无限循环。

#include <stdio.h>

int main(void)
{
    int a[5] , i , j = 0;
    for (i=0;i<=5;i++)
    {
        a[i] = j;
        printf("%d " , a[5]);
    }
    return 0;
}

请向我解释为什么循环在第一种情况下是无限的,而不是在第二种情况下。

【问题讨论】:

  • 您需要在问题中包含代码,而不是屏幕截图。乍一看,这看起来与this question 非常相似,因此它可能是围绕未定义行为进行的积极优化,因为您在最后一次数组访问时超出了范围。
  • 您正在遍历数组并且很可能在 i 变量之上进行写入。未定义的行为,不要那样做。也不要将代码作为屏幕截图发布。
  • 一旦您将代码添加到您的问题中,我很高兴重新投票,但如果我对上面的评论是正确的,它可能会再次关闭作为重复项。
  • 我很抱歉这是我第一次在这里提出问题,我也想显示输出,这就是发布截图的原因。对不起
  • 投票重新打开,它看起来与我上面链接的问题非常相似,但我无法重现。您能解释一下您使用的是哪个编译器和哪些标志吗?

标签: c arrays infinite-loop


【解决方案1】:

您声明您的数组大小为 5。因此有效索引为 0 到 4(含)。在循环的最后一遍中,您写入位置 a[5],这会破坏在数组末尾之后恰好存在于该地址的任何变量。这可能是您的循环变量 i,这取决于编译器如何将变量放置在内存中。结果通常是不可预测的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多