首页 > 解决方案 > 为什么会出现分段错误,我该如何解决?

问题描述

使用至少 4 个函数进行冒泡排序的 C 程序。(输入、输出、计算、主)

我还没有真正理解指针和函数。

    #include <stdio.h>

    void input(int* size, int* arr[])
    {
        printf("Enter the size of the array: ");
        scanf("%d",size);

        printf("Enter the elements of the array\n");
        for(int i = 0;i < *size; i++)
        {
            scanf("%d", arr[i]);
        }
    }

    void swap(int *x,int *y)
    {
        int temp = *x;
        *x = *y;
        *y = temp;
    }

    void bubble_sort(int arr[100],int size)
    {
        for(int i = 0;i < size - 1;i++)
        {
            for(int j = 0;j < size - 1 - i;j++)
            {
                if(arr[j] > arr[j+1])
                {
                    swap(&arr[j],&arr[j+1]);
                }
            }
        }
    }

    void output(int size,int* arr)
    {
        printf("Sorted array\n");
        for(int i = 0;i < size;i++)
        {
            printf("%d",arr[i]);
        }
    }

    int main()
    {

        int* input_values[50];
        int size;
        input(&size, input_values);
        bubble_sort(size,*input_values);
        output(size, *input_values);
        return 0;
    }

没有错误但显示分段错误。我该如何解决这个问题?

标签: c

解决方案


所以你的问题在这里:

scanf(" %d", arr[i]);

您必须将其更改为:

scanf(" %d", &arr[i]);

这是主要问题,但还有很多其他问题。您还必须更改参数的顺序

bubble_sort(size,*input_values);

bubble_sort(input_values,size); 

output(size, *input_values); 

output(size, input_values);

此外,为了使它能够正常工作,我已经改变了

scanf("%d", &arr[i]);

scanf(" %d", &arr[i]);

推荐阅读