簡體   English   中英

嵌套的循環值未初始化

[英]nested for loop value of not initialized

我知道問題聽起來很愚蠢,我真的無法弄清楚這段代碼有什么問題嗎?

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

調試器屏幕短

在第二個for循環中,它應該是j < size ,而不是i < size

您的sort功能中存在3個問題:

  • 內部for循環中的測試使用i而不是j j已初始化,但測試始終成功,並且循環繼續進行,使代碼無法超出其邊界訪問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]);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM