int [n] [m], wobei n und m zur Laufzeit bekannt sind

Ich muss oft ein 2D-Array erstellen, dessen Breite und Höhe (seien sie n und m) zum Zeitpunkt der Kompilierung unbekannt sind. Normalerweise schreibe ich:

vector<int> arr(n * m);

Und ich greife manuell auf Elemente zu mit:

arr[j * m + i] 

Mir wurde kürzlich gesagt, dass ich stattdessen schreiben könnte:

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

Also hier sind 2 Fragen:

Ist dieses Verhalten vom C ++ Standard erlaubt?Wie soll ich ein solches Array an eine Funktion übergeben? g ++ meldet, dass arr einen Typ hatint (*)[n]Aber auch hier ist n dynamisch und außerhalb der Funktion, in der es deklariert ist, nicht bekannt (main).