C-同一程序正在为我提供不同的输出



我正在尝试制作选择的递归版本。它尚未完成。我只设法找到了最小元素的索引。当我运行程序时,有时它可以正常工作并输出正确的值,但其他时候它给了我" 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("%dn", 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: %dn",var);
}
int SelectionSort(int arr[], int len){
    int index,max,i;
    int k = MaxInd(arr, i, len, max, index);
}

indexmaxi是未启示的,从中获得的结果是每次都不同,因为它是未定义的behvaiour。

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;
    }
    ...

相关内容

  • 没有找到相关文章

最新更新