c - 相同的程序给我不同的输出

标签 c recursion segmentation-fault selection-sort

我正在尝试制作选择排序的递归版本。它还没有完成。我只找到了最小元素的索引。当我运行我的程序时,有时它工作正常并输出正确的值,但有时它会给出“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 , maxi未初始化,您从中得到的结果是 每次都不同,因为它是未定义的行为。

还有

int MaxInd(int arr[], int i, int len, int max, int index){
    if (arr[i]>max){
        max=arr[i];
        index=i;
    }
    ...

您应该检查 i < len在尝试访问 arr[i] 之前, 否则 您可以访问超出 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;
    }

    ...

关于c - 相同的程序给我不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041329/

相关文章:

c - 无法插入链表

python - 在python中制作递归函数

java - 在 Java 中使用指定的开始和结束索引查找数组中的最大整数,**递归**

python - 将迭代转化为递归

c - 有没有办法在出现段错误时打印一些内容? C

c - 调试缓冲区溢出引起的段错误

c - ANN : Learning Vector Quantization not working

c - 在 C 中共享子项和父项之间的链表

c - Raspberry PI 中的幂函数

c - f将双向链表写入二进制文件段错误