C/C++

Программа выдает ошибку c++

Дана задача: написать программу сложения двух матриц с использованием функций 1. генерации матрицы, 2. вывода на экран, 3. сложение матриц
Я написала эту программу, но матрицы не складываются, не могу понять почему
код:
#include <iostream>
using namespace std;
int n, m;
void CreateMatrix(int **a)
{
for (int i = 0; i < n; i++)
{
a[i] = new int[m];
for (int j = 0; j < m; j++)
a[i][j] = rand() % 100;

}
}
void PrintMatrix(int **a, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout.width(8);
cout << a[i][j] << ' ';
}
cout << endl << endl;
}
}
void matrix_sum(int **a, int **b, int **sum)
{
for (int i = 0; i < n; i++)
{

for (int j = 0; j < m; j++)
{
sum[i][j] = a[i][j] + b[i][j];
cout.width(8);
cout << sum[i][j] << ' ';

}
cout << endl << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Введите количество строк матриц" << endl;
cin >> n;
cout << "Введите кол столбцов матриц " << endl;
cin >> m;
int **MatrixA = new int *[n];
CreateMatrix(MatrixA);
cout << "Матрица А: " << endl << endl;
cout.precision(3);
PrintMatrix(MatrixA, n, m);

int **MatrixB = new int *[n];
CreateMatrix(MatrixB);
cout << "Матрица B: " << endl << endl;
cout.precision(3);
PrintMatrix(MatrixB, n, m);
cout << "Результат сложения матриц А и В: " << endl;
int **sum = new int *[n];
matrix_sum(MatrixA, MatrixB, sum);
cout << endl;
system("Pause");
for (int i = 0; i < n; i++)
{
delete[] MatrixA[i];
}
delete[] MatrixA;
for (int i = 0; i < n; i++)
{
delete[] MatrixB[i];
}
delete[] MatrixB;
return 0;
}
Нужно выделять память для матрицы sum:

#include <iostream>
#include <ctime>
using namespace std;
int n, m;
void CreateMatrix(int **a)
{
for (int i = 0; i < n; i++)
{
a[i] = new int[m];
for (int j = 0; j < m; j++)
a[i][j] = rand() % 100;

}
}
void PrintMatrix(int **a, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout.width(8);
cout << a[i][j] << ' ';
}
cout << endl << endl;
}
}
void matrix_sum(int **a, int **b, int **sum)
{
for (int i = 0; i < n; i++)
{

for (int j = 0; j < m; j++)
{
sum[i][j] = a[i][j] + b[i][j];
cout.width(8);
cout << sum[i][j] << ' ';

}
cout << endl << endl;
}
}
int main()
{
srand(time(NULL));
setlocale(LC_ALL, "Russian");
cout << "Введите количество строк матриц" << endl;
cin >> n;
cout << "Введите кол столбцов матриц " << endl;
cin >> m;
int **MatrixA = new int *[n];
CreateMatrix(MatrixA);
cout << "Матрица А: " << endl << endl;
cout.precision(3);
PrintMatrix(MatrixA, n, m);

int **MatrixB = new int *[n];
CreateMatrix(MatrixB);
cout << "Матрица B: " << endl << endl;
cout.precision(3);
PrintMatrix(MatrixB, n, m);
cout << "Результат сложения матриц А и В: " << endl;
int **sum = new int *[n];

CreateMatrix(sum);

matrix_sum(MatrixA, MatrixB, sum);
cout << endl;
system("Pause");

for (int i = 0; i < n; i++)
{
delete[] sum[i];
}
delete[] sum;

for (int i = 0; i < n; i++)
{
delete[] MatrixA[i];
}
delete[] MatrixA;
for (int i = 0; i < n; i++)
{
delete[] MatrixB[i];
}
delete[] MatrixB;
return 0;
}
Владимир Жданкин
Владимир Жданкин
95 002
Лучший ответ
Я у Вас убрала кое-что лишнее и сомнительное, добавила вместо этого кое-что необходимое и всё сразу заработало правильно:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int n, m;
void CreateMatrix(int **a)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) a[i][j] = rand() % 100;
}
void PrintMatrix(int **a)
{
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) cout << setw(4) << a[i][j];
cout << endl;
}
cout << endl;
}
void sum(int **a, int **b, int **c)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
c[i][j] = a[i][j] + b[i][j];
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Введите количество строк матриц: ";
cin >> n;
cout << "Введите количество столбцов матриц: ";
cin >> m;
srand(time(NULL));
int **MatrixA = new int *[n], **MatrixB = new int *[n],
**Matrix_Sum = new int *[n];
for (int i = 0; i < n; i++)
{
MatrixA[i] = new int [m];
MatrixB[i] = new int [m];
Matrix_Sum[i] = new int [m];
}
CreateMatrix(MatrixA);
cout << "\nМатрица А: " << endl;
PrintMatrix(MatrixA);
CreateMatrix(MatrixB);
cout << "Матрица B: " << endl;
PrintMatrix(MatrixB);
sum(MatrixA, MatrixB, Matrix_Sum);
cout << "Результат сложения матриц А и В: " << endl;
PrintMatrix(Matrix_Sum);
cout << endl;
system("pause > nul");
return 0;
}
Jamal Turdubaev
Jamal Turdubaev
29 440