C/C++

Создать и вывести двумерный массив через функции

Нужно создать двумерный массив (размеры массива вводятся с клавы), заполненный рандомными числами. Создание и вывод массива нужно запихнуть в функцию, а в int main() просто их вызвать.

Вот мой код, который не работает:

#include <iostream>
#include <random>
using namespace std;
void CreateMatrix(int n, int m)
{
srand(time(0));
int B[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[n][m] = rand() % 10;
}
}
}
void ShowMatrix(int n, int m)
{
int B[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << B[n][m] << " ";
}
cout << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int a,b;
cout << "Введите а и b через пробел: " << endl;
cin >> a >> b;
CreateMatrix(a,b);
ShowMatrix(a,b);
}
 #include  
#include
using namespace std;

int** create(int a, int b)
{
if (a
Рустем Рус
Рустем Рус
51 416
Лучший ответ
Естественно, код работает.
CreateMatrix должна вернуть массив, а точнее - указатель на него.
ShowMatrix помимо размера массива должна принимать указатель на него, чтобы его можно было вывести.
Ваш код не работает, потому что вы создаете массив B внутри функции CreateMatrix, и он уничтожается после выхода из этой функции. Поэтому функция ShowMatrix не имеет доступа к этому массиву.

Чтобы исправить эту проблему, вы можете создать массив в функции main и передать его в качестве аргумента в функции CreateMatrix и ShowMatrix. Также вам нужно исправить индексы при обращении к элементам массива: вместо B[n][m] нужно использовать B[i][j].

Вот исправленный код:

#include <iostream>
#include <random>
using namespace std;

void CreateMatrix(int n, int m, int** B)
{
srand(time(0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[i][j] = rand() % 10;
}
}
}

void ShowMatrix(int n, int m, int** B)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << B[i][j] << " ";
}
cout << endl;
}
}

int main()
{
setlocale(LC_ALL, "Russian");
int a,b;
cout << "Введите а и b через пробел: " << endl;
cin >> a >> b;

int** B = new int*[a];
for (int i = 0; i < a; i++)
B[i] = new int[b];

CreateMatrix(a,b,B);
ShowMatrix(a,b,B);

for (int i = 0; i < a; i++)
delete[] B[i];
delete[] B;

return 0;
}
Илья Milutin проверки на NULL нет ни одной... А здесь это уже обсуждалось
Михаил Михаил Почему-то массив заполняется одинаковыми числами, хотя должен разными