Почему я получаю «ошибку сегментации» при использовании двойного указателя в качестве аргумента для двумерного массива? - PullRequest
2 голосов
/ 05 июня 2019

Проблема состоит в том, чтобы взять вход матрицы 4X5 и сместить каждую из ее строк по кругу влево на 2 позиции. Как если бы input был {1,2,3,4,5}, то выход должен быть {3,4,5,1,2}. Я написал следующий код для того же. Но я получаю ошибку «ошибка сегментации (ядро сброшено)». Ты можешь помочь мне с этим. Также я немного восприимчив к отправке двухмерного массива с аргументом ** p. КОММЕНТАРИЙ НА ЭТО ТАКЖЕ. Я хочу знать, почему я получаю ошибку.

#include <stdio.h>
void shift(int **);
int main()
{
    int i,j,a[4][5];
    printf("Enter the elements of the 4X5 matrix:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    printf("Entered Matrix:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    printf("\n");

        shift(a);

        printf("The new array is:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}

void shift(int **p)
{
    int i;
    for(i=0;i<4;i++)
    {
        int temp[2] = {**(p+i),*(*(p+i)+1)};
        *(*(p+i)+0) = *(*(p+i)+2);
        *(*(p+i)+1) = *(*(p+i)+3);
        *(*(p+i)+2) = *(*(p+i)+4);
        *(*(p+i)+3) = temp[0];
        *(*(p+i)+4) = temp[1];
    }
}

Ожидаемый результат - Поворотный массив Фактический результат - ошибка сегментации (сбрасывается ядро)

1 Ответ

1 голос
/ 05 июня 2019

Доступ к элементам массива 2D-массива, подобный этому, работает только для 2D-массивов.Вместо того, чтобы объявлять это так:

void shift(int **p)

Вы должны изменить это на следующее:

void shift(int p[4][5])

И то же самое для прототипа функции. Нажмите здесь для демонстрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...