I can write operator new for one-dimensional array as follows:

```
int n{3};
new int[n];

```

It allocates at least `sizeof(int) * n` bytes. But when I want to create two and more dimensional array, only first dimension may be non-constant:

```
int n{3};
new int[n][3]; //ok
new int[n][n]; //error;

```

Why such restrictions are take place? Are there any difficulties to determine, that it is at least `sizeof(int) * n * n` bytes to allocate?