![](/img/trans.png)
[英]Why is the value of 'i' in the loop not conflicting with the one initialized in the for loop
[英]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.