int [n] [m], где n и m известны во время выполнения

Мне часто нужно создать 2D-массив с шириной и высотой (пусть они будут n и m) неизвестными во время компиляции, обычно я пишу:

vector<int> arr(n * m);

И я получаю доступ к элементам вручную с помощью:

arr[j * m + i] 

Мне недавно сказали, что я мог бы вместо этого написать:

int arr[n][m] // n and m still only known at runtime.

Итак, вот 2 вопроса:

Это поведение разрешено стандартом C ++?Как мне передать такой массив в функцию? g ++ сообщает, что arr имеет типint (*)[n], но опять же, n является динамическим и неизвестным за пределами функции, в которой оно объявлено (main).

Ответы на вопрос(2)

Ваш ответ на вопрос