Операции с матрицами. Изменение порядка строк. Run-time error
Задача состоит в том, чтобы преобразовать двумерную матрицу следующим образом. Строки с четными номерами должны поменяться местами с нечетными. При этом нужно использовать динамические массивы. Я создал 2 массива: один заполняется в ручную, второй - по условию задачи. После они выводятся. При четном количестве строк всё работает, как только меняю на нечеткое кол-во, выдает ошибку из заголовка в дебаге. Если строк нечетное кол-во, то последнюю надо оставить как она есть. Точная формулировка задачи: "Реализуйте следующее преобразование двумерной матрицы: при передаче в выходную матрицу строки с четными номерами меняются местами с нечетными.(использовать динамические массивы)"
Unhandled exception at 0x00007FF754382696 in task_4.exe:
0xC0000005: Access violation reading location 0x00000000FDFDFDFD
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
unsigned rows = 5;
unsigned columns = 2;
int** arr1{ new int* [rows] {} }; //создаем первый массив
for (unsigned i{}; i < rows; i++){
arr1[i] = new int[columns] {};
}
int** arr2{ new int* [rows] {} }; //создаем второй массив
for (unsigned i{}; i < rows; i++) {
arr2[i] = new int[columns] {};
}
for (unsigned i{}; i < rows; i++) //заполняем первый массив
{
cout << "Enter data for " << (i + 1) << " row" << endl;
for (unsigned j{}; j < columns; j++)
{
cout << (j + 1) << " column: ";
cin >> arr1[i][j];
}
}
cout << endl;
for (unsigned i{}; i < rows; i++) //выводим первый массив
{
for (unsigned j{}; j < columns; j++)
{
cout << arr1[i][j] << "\t";
}
cout << endl;
}
for (unsigned i{}; i < rows; i++) //заполняем второй массив
{
for (unsigned j{}; j < columns; j++)
{
if (i % 2 == 0) {
arr2[i][j] = *&arr1[i + 1][j];
}
if (i % 2 != 0) {
arr2[i][j] = *&arr1[i-1][j];
}
}
}
cout << endl;
for (unsigned i{}; i < rows; i++) //выводим второй массив
{
for (unsigned j{}; j < columns; j++)
{
cout << arr2[i][j] << "\t";
}
cout << endl;
}
for (unsigned i{}; i < rows; i++)
{
delete[] arr1[i];
}
delete[] arr1;
for (unsigned i{}; i < rows; i++)
{
delete[] arr2[i];
}
delete[] arr2;
system("pause");
return 0;
}