При выводе числа из массива выводится числа которые там отсутствуют
У меня есть код перемножения матриц (Закоменченые cout-строки выводят структуру выходной матрицы):
#include <iostream>
using namespace std;
long **matrix_mult(int **matrix_a, int **matrix_b, int *size_a, int *size_b){
if(size_a[0]==size_b[1]){
long **out_matrix = new long*[size_a[0]];
for(long layer=0;layer<size_a[0];layer++){
for(long clmn=0;clmn<size_b[1];clmn++){
out_matrix[layer] = new long[size_b[1]];
long elem_n=0;
for(long elem=0;elem<size_a[1];elem++){
//cout<<matrix_a[layer][elem]<<"*"<<matrix_b[elem][clmn]<<" | ";
elem_n+=matrix_a[layer][elem]*matrix_b[elem][clmn];
}
out_matrix[layer][clmn]=elem_n;
//cout<<" elem: "<<out_matrix[layer][clmn]<<" --- "; <- Тут выводится то, что нужно
}
cout<<endl;
}
cout<<"OK\n";
return out_matrix;
} else {
cout<<"INVALID MATRIX FORMAT\n";
}
cout<<"FAIL\n";
}
int main(){
cout<<"\nSTART\n";
int **a = new int*[2];
a[0] = new int[3]{1,2,2};
a[1] = new int[3]{3,1,1};
int **b = new int*[3];
b[0] = new int[2]{4,2};
b[1] = new int[2]{3,1};
b[2] = new int[2]{1,5};
int sa[]{2,3};
int sb[]{3,2};
/*
Нужный результат:
12 14
16 12
*/
cout<<matrix_mult(a, b, sa, sb)[0][0]; // Тут выводится что то вроде "1900736", а должно 12
cout<<"\nEND\n";
}
При попытке запустить код ошибок нет, от переполнения я попытался избавиться заменив int
на long
(так как уже встречался с похожей проблемой из-за переполнения), но это не помогло, всё рушится на моменте завершения всех for-ов. Как можно исправить это?
ОС: Windows 10
Компилятор: g++ mingw32 7.3.0
PS: При замене int
на long
оказалось, что число, которое выводится в консоль будет на столько большим, на сколько можно(но не максимум числового типа), я поменял long
на long long
и вывелось число еще более большое