Что касается массивов переменного размера, то прочитайте Почему массивы переменной длины не являются частью стандарта C ++?
Поскольку вы используете C ++, я бы посоветовал один из контейнеров, предоставленных язык для хранения ваших данных, в данном случае вектор векторов.
Live Sample
#include <iostream>
#include <vector>
using namespace std; // for test purposes shouldn't be used
void fill(int val, int lines, int cols, vector<vector<int>>& matrix){
for (int i = 0; i < lines; i++){
vector<int> v;
for (int j = 0; j < cols; j++)
v.push_back(val);
matrix.push_back(v);
}
}
int main() {
int lines, cols;
vector<vector<int>> matrix;
cout << "lines and columns: " << endl;
cin >> lines >> cols;
fill(1, lines, cols, matrix);
}
Если вы должны использовать массивы, то я бы посчитал, что лучше способ заключается в динамическом распределении памяти, C стиль:
Live Sample
#include <iostream>
using namespace std; // for test purposes, shouldn't be used
void fill(int val, int n, int m, int *arr){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
*(arr+i+j) = val;
}
}
}
int main(){
int n, m;
cout << "lines and columns: " << endl;
cin >> n >> m;
int* arr = (int*) malloc(sizeof(*arr) * n * m) ;
fill(1, n, m, arr);
}