Как переместить элементы одного массива в другой
Задание:Дана действительная квадратная матрица порядка 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");
}
}
Кстати, советую посмотреть вот этот вопрос: Создание динамического двумерного массива.