嵌套的循环值未初始化

时间:2018-08-13 02:45:59

标签: c for-loop initialization

我知道问题听起来很愚蠢,我真的无法弄清楚这段代码有什么问题吗?

void sort(int *arr, int size)
{
    int min = 0;
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = i; i < size; j++)
        {
            if (arr[min] > arr[j])
            {
                min = j;
            }
        }
        if (min != i)
        {
            Swap(&arr[i], &arr[min]);
        }
    }    
}

以下代码应对arr进行排序,但它给出了分段错误。 我通过调试器运行了这段代码,它在行

上显示了j的值
        for (int j = i; i < size; j++)

类似3234(未初始化)的程序结束。但是j应该是0

debuger screenshort

2 个答案:

答案 0 :(得分:2)

在第二个for循环中,它应该是j < size,而不是i < size

答案 1 :(得分:1)

sort函数中存在3个问题:

  • 内部for循环中的测试使用i而不是jj已初始化,但测试始终成功,并且循环继续进行,使代码访问arr超出其边界,从而导致不确定的行为。
  • min应该在外循环内初始化为i
  • j应该初始化为i + 1是内部循环(次要)。

这是更正的版本:

void sort(int *arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        int min = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[min] > arr[j]) {
                min = j;
            }
        }
        if (min != i) {
            Swap(&arr[i], &arr[min]);
        }
    }
}