Не могу понять, что сделала не так
Код умножает матрицу на эту же транспонированную матрицу. Работает при размере матрицы n*m, n<=m, если n>m выдает System.AccessViolationException.
Понимаю, что ошибка максимально глупая, но найти не могу.
Код:
namespace Liba {
public ref class Class1
{
public:
static void enter_mas(int* mas, int n);
static void Inputmas(int** a, int n, int m);
static void Del(int** mas, int m);
static int** TranspMatrix(int** Matrix, int n, int m);
static int** MulMatr(int** M1, int r1, int c1, int** M2, int r2, int c2);
};
}
void Class1::Inputmas(int** a, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = 0 + (rand() % 20);
}
}
int** Class1::MulMatr(int** M1, int r1, int c1, int** M2, int r2, int c2) {
int** MulMatr = new int* [r1];
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
MulMatr[i] = new int[c2];
MulMatr[i][j] = 0;
for (int k = 0; k<c1; k++) {
MulMatr[i][j] += M1[i][k] * M2[k][j];
}
}
}
return MulMatr;
}
int** Class1::TranspMatrix(int** Matrix, int n, int m)
{
int** tMatrix = new int* [m];
for (int i = 0; i < m; i++) {
tMatrix[i] = new int[n];
}
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
tMatrix[j][i] = Matrix[i][j];
return tMatrix;
}
int** arr = new int* [n];
int** matr = new int* [m];
for (int i = 0; i < n; i++) {
arr[i] = new int[m];
}
for (int i = 0; i < m; i++) {
matr[i] = new int[n];
}
int** mult = new int* [n];
for (int i = 0; i < n; i++) {
mult[i] = new int[m];
}
Liba::Class1::Inputmas(arr, n, m);
matr = Liba::Class1::TranspMatrix(arr, n, m);
mult = Liba::Class1::MulMatr(arr, n, m, matr, m, n);