Начал повторять C++ и возникла проблема при суммировании матриц, что вывод 2-х матриц А и В нормальный, а при выводе матрицы А+В выходит вот что :
(матрица 2х2, для других также)
а11+в11 -842150451
а21+в21 -842150451
Тоесть первые столбцы суммирует нормально,а остальные нет Почему так?
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
void MatrCreate(int**Arr2d, int n, int m)
{
for (int i = 0; i<n; i++)
{
for (int j = 0; j<m; j++)
{
Arr2d[i][j] = rand() % 10;
}
}
}
void MatrOut(int**Arr2d, int n, int m)
{
for (int i = 0; i<n; i++)
{
for (int j = 0; j<m; j++)
{
cout << Arr2d[i][j] << " ";
}
cout << endl;
}
}
void MatrSum(int**A1, int**B1,int**Sumarr, int n, int m)
{
for (int i = 0; i<n; i++)
{
for (int j = 0; i<m; i++)
{
Sumarr[i][j] = A1[i][j] + B1[i][j];
}
}
for (int i = 0; i<n; i++)
{
for (int j = 0; j<m; j++)
{
cout << Sumarr[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int n;
int m;
cout << " please input n:" << endl;
cin >> n;
cout << " please input m: " << endl;
cin >> m;
int **Arr = new int*[n];
for (int i = 0; i < m; i++)
{
Arr[i] = new int[n];
}
MatrCreate(Arr, n, m);
MatrOut(Arr, n, m);
int **Barr = new int*[n];
for (int i = 0; i < m; i++)
{
Barr[i] = new int[n];
}
cout << "____________________" << endl;
MatrCreate(Barr, n, m);
MatrOut(Barr, n, m);
cout << "____________________" << endl;
cout << " Sum of Matrices:" << endl;
int **Sumarr = new int*[n];
for (int i = 0; i < m; i++)
{
Sumarr[i] = new int[n];
}
MatrSum(Arr, Barr,Sumarr, n, m);
delete []Arr;
delete []Barr;
delete []Sumarr;
system("pause");
return 0;
}
Вы как будто собираетесь работать с матрицами n x m
, но выделение памяти везде делаете с размером n
, при этом почему то выполняя цикл только до m
int **Arr = new int*[n];
for (int i = 0; i < m; i++)
{
Arr[i] = new int[n];
}
То есть фактически вы выделяете память для матрицы m x n
. А далее доступаетесь к ней, как к n x m
. Получается вылет за пределы массива со типичными последствиями.
Почему цикл только до m
? Почему всегда выделяется массив размера n
?
Циклы при суммировании матриц
for (int i = 0; i<n; i++)
{
for (int j = 0; i<m; i++)
Почему в обоих циклах сравнение и инкремент делается для i
?
Бессмыслицей также является
delete Arr, Barr, Sumarr;
Что вы пытаетесь этим сделать?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
подскажите пожалуйста, как в компилятор С++ разрешает проблему неявного привидения типовВ частности интересует вопрос: почему в первом случае...