Ошибка Segmentation faul (core dumped)
Есть код на C++ нужно посчитать сумму строк и столбцов по отдельности .При создании и заполнении массива n * n все работает как только массив создать n*m то выдает ошибку
#include <iostream>
using namespace std;
int
main ()
{
int n, s, m;
cin >> n >> m;
int **arr = new int *[n];
for (int i = 0; i < n; i++)
{
arr[i] = new int[i + 1];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
for (int i = 0; i < n; i++)
{
int sum = 0;
for (int j = 0; j < m; j++)
{
sum += arr[i][j];
}
cout << sum << " ";
}
cout << endl;
for (int j = 0; j < m; j++)
{
int sum = 0;
for (int i = 0; i < m; i++)
{
sum += arr[i][j];
}
cout << sum << " ";
}
cout << endl << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
for (int i = 0; i < n; i++)
{
delete[] arr[i];
}
}
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
int **arr = new int *[n];
for (int i = 0; i < n; i++)
{
arr[i] = new int[i + 1];
}
это не матрица NxM
прямоугольная матрица создаётся так:
int **arr = new int *[n];
for (int i = 0; i < n; i++)
{
arr[i] = new int[m];
}
в вашем случае вы создавали матрицу у которой n строк кол-во столбцов равных номеру строки, в результате очень легко уходили за диапазон, когда вызывали [i][j], где j было больше i
А вот вторая ошибка:
for (int j = 0; j < m; j++)
{
int sum = 0;
for (int i = 0; i < m; i++)
{
sum += arr[i][j];
}
cout << sum << " ";
}
теперь вы обходите i < m, но если m > n, то обращаясь к arr[i][j] опять выходите за диапазон