同一个程序给了我不同的输出
Same program is giving me different outputs
我正在尝试制作选择排序的递归版本。它还没有完成。我只找到了最小元素的索引。当我 运行 我的程序有时工作正常并输出正确的值,但有时它会给我“1869833334”,然后由于某种原因出现分段错误,我无法弄清楚为什么。
#include <stdio.h>
int MaxInd(int arr[], int i, int len, int max, int index){
if (arr[i]>max){
max=arr[i];
index=i;
}
if(i==len-1){
return index;
}
index = MaxInd(arr,i+1,len,max,index);
printf("%d\n", index);
return index;
}
int SelectionSort(int arr[], int len){
int index,max,i;
int k = MaxInd(arr, i, len, max, index);
}
int main(void){
int arr[6] = {1,4,5,0,9,2};
int len=sizeof(arr)/sizeof(arr[0]);
int var=SelectionSort(arr, len);
printf("final index is: %d\n",var);
}
int SelectionSort(int arr[], int len){
int index,max,i;
int k = MaxInd(arr, i, len, max, index);
}
index
、max
和 i
未初始化,您从中得到的结果是
每次都不一样,因为它是未定义的行为。
还有
int MaxInd(int arr[], int i, int len, int max, int index){
if (arr[i]>max){
max=arr[i];
index=i;
}
...
您应该在尝试访问 arr[i]
之前检查 i < len
,否则
您可以访问超出 arr
的限制。你应该把支票放在
访问值:
int MaxInd(int arr[], int i, int len, int max, int index){
if(i==len-1){
return index;
}
if (arr[i]>max){
max=arr[i];
index=i;
}
...
我正在尝试制作选择排序的递归版本。它还没有完成。我只找到了最小元素的索引。当我 运行 我的程序有时工作正常并输出正确的值,但有时它会给我“1869833334”,然后由于某种原因出现分段错误,我无法弄清楚为什么。
#include <stdio.h>
int MaxInd(int arr[], int i, int len, int max, int index){
if (arr[i]>max){
max=arr[i];
index=i;
}
if(i==len-1){
return index;
}
index = MaxInd(arr,i+1,len,max,index);
printf("%d\n", index);
return index;
}
int SelectionSort(int arr[], int len){
int index,max,i;
int k = MaxInd(arr, i, len, max, index);
}
int main(void){
int arr[6] = {1,4,5,0,9,2};
int len=sizeof(arr)/sizeof(arr[0]);
int var=SelectionSort(arr, len);
printf("final index is: %d\n",var);
}
int SelectionSort(int arr[], int len){
int index,max,i;
int k = MaxInd(arr, i, len, max, index);
}
index
、max
和 i
未初始化,您从中得到的结果是
每次都不一样,因为它是未定义的行为。
还有
int MaxInd(int arr[], int i, int len, int max, int index){
if (arr[i]>max){
max=arr[i];
index=i;
}
...
您应该在尝试访问 arr[i]
之前检查 i < len
,否则
您可以访问超出 arr
的限制。你应该把支票放在
访问值:
int MaxInd(int arr[], int i, int len, int max, int index){
if(i==len-1){
return index;
}
if (arr[i]>max){
max=arr[i];
index=i;
}
...