Почему мой код вызывает ошибку сегментации? - PullRequest
0 голосов
/ 09 апреля 2020

Так что я работаю над этой программой, которая должна принимать указатель на массив и размер массива (количество элементов в массиве) в качестве аргументов, находит место индекса выброса, фиксирует массив на месте (что is помещает выброс в место, где он должен быть), и возвращает старый индекс, в котором был найден выброс. я закончил свой код, но по какой-то причине где-то в моей основной функции он говорит мне, что есть ошибка сегментации, я знаю, что это в моей основной функции, потому что она компилировалась и работала нормально, когда это был просто исходный код. вот код;

#include <stdio.h>

long long int fix_sorted_array(double* arr, unsigned long n)
{
    double temp;
    int i, j;
    for ( i = 0; i < n - 1; i ++)
    {
        if (arr[i] > arr[i + 1])
        {
            for ( j = i + 1; j > 0; j --)
            {
                if (arr[j] < arr[j-1])
                {
                    temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                }
            }
            return i + 1;
        }
    }
    return -1;
}

int main()
{
    int n;
    int j;//declared variables
    double arr[n];
    printf("Enter elements of array : \n");
    for ( int i = 0; i < n; i ++)
    {
        scanf("%lf", &arr[i]);
    }
    printf("Return index : %lld\n",fix_sorted_array (&arr[n], n));
    printf("Array after : \n");
    for ( j = 0; j < n; j ++)
    {
        printf("%.2lf", arr[j]);
    }
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Вы передаете адрес вне массива функции в этой строке:

    printf("Return index : %lld\n",fix_sorted_array (&arr[n], n));

Вы хотите передать адрес начала массива, а не конца, поэтому он должен быть:

    printf("Return index : %lld\n",fix_sorted_array (arr, n));

Вам также нужно инициализировать n перед объявлением массива.

printf("How many numbers? ");
scanf("%d", &n);
double arr[n];
0 голосов
/ 09 апреля 2020

Вы никогда не принимали значение n. Ниже может помочь код.

#include <stdio.h>

long long int fix_sorted_array(double* arr, unsigned long n)
{
double temp;

int i, j;

for ( i = 0; i < n - 1; i ++)
{

    if (arr[i] > arr[i + 1])
    {

        for ( j = i + 1; j > 0; j --)
        {

            if (arr[j] < arr[j-1])
            {

                temp = arr[j];

                arr[j] = arr[j-1];

                arr[j-1] = temp;
            }
        }

    return i + 1;
    }
}

return -1;
}



int main()
{
int n;

int j;//declared variables

printf("Enter the number of elements in arrays");
scanf("%d",&n); // initialize the values of n

double arr[n];


printf("Enter elements of array : \n");

for ( int i = 0; i < n; i ++)
{

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

printf("Return index : %lld\n",fix_sorted_array (&arr[0], n)); // Also pass the value of starting index in array i.e. `arr[0]`

printf("Array after : \n");

for ( j = 0; j < n; j ++)
{
    printf("%.2lf", arr[j]);
}

}

...