Как переместить элементы одного массива в другой

Задание:Дана действительная квадратная матрица порядка k. Преобразовать матрицу по следующему правилу: строку с номером k сделать столбцом с номером k, а столбец с номером k — строкой с номером k. Создал вроде два массива, но не могу перекидывать из одного в другой элементы. В момент приравнивания, программа останавливается и пишет "Исключение не обработано"

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int** mas;
    int M, N;
    int** mas1;

    printf("ryad pls:");
    scanf_s("%d", &M);
    printf("stob pls:");
    scanf_s("%d", &N);
    mas1 = (int**)malloc(M * N* sizeof(int));
    mas = (int**)malloc(M * N * sizeof(int));
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            printf("arrayl (%d)(%d) = ", i, j);
            scanf_s("%d", &mas[i * N + j]);
        }
    }

    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            printf("%5d ", mas[i * N + j]);
        }
        printf("\n");
    }
    for (int i = 0; i < M; i++)
    {

        for (int j = 0; j < N; j++)
        {
            if (j != N - 1)

                mas1[j][i] = mas[i][j];
            else
                mas1[j][i] = mas[i][j];

        }

    }
}

Ответы (1 шт):

Автор решения: Harry

Обращение

 mas1[j][i] = mas[i][j]

категорически неверное! При вашем объявлении массивов как int**, при том что реально они таковыми не являются!

Вот исправленный код, посмотрите сами, что изменено, и подумайте, почему...

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int* mas;
    int M, N;
    int* mas1;

    printf("ryad pls:");
    scanf_s("%d", &M);
    printf("stob pls:");
    scanf_s("%d", &N);

    if (M != N) {
        printf("It's not **SQUARE** matrix!\n");
        return 1;
    }

    mas1 = malloc(M * N* sizeof(int));
    mas = malloc(M * N * sizeof(int));
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            printf("arrayl (%d)(%d) = ", i, j);
            scanf_s("%d", &mas[i*N + j]);
        }
    }

    printf("\n\n");

    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            printf("%5d ", mas[i*N + j]);
        }
        printf("\n");
    }

    printf("\n\n");

    for (int i = 0; i < M; i++)
        for (int j = 0; j < N; j++)
            mas1[j*M+i] = mas[i*N+j];

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            printf("%5d ", mas1[i*M + j]);
        }
        printf("\n");
    }

}

Кстати, советую посмотреть вот этот вопрос: Создание динамического двумерного массива.

→ Ссылка