Выражение должно иметь константное значение при объявлении двумерного массива

Универское задание: отсортировать двумерный массив 2х9, мне показалось это слишком легко и решил сделать динамическую размерность массива. Но после того как я поменял всё на динамику получил единственную ошибку "Выражение должно иметь константное значение" в строке объявления двумерного массива, в интернете решение этого не нашел. (Не исключено что плохо искал но всё же) Как это можно исправить оставив динамическую размерность массива?

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

void coutArr(int **arr, int x, int y) 
{

    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            cout << arr[i][j] << "\t";//Вывод.
        }
        if (i == 0)
        {
            cout << endl;
        }
    }

}

void fillArr(int **arr, int x, int y)
{
    srand(time(0));
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            arr[i][j] = rand() % 1000;
        }
    }
}

void twoDimToOne(int **arr, int **tempArr, int x, int y, int n)
{
    int k = 0;
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            *tempArr[k] = arr[i][j];
            k++;
        }
    }
}

void oneDimToTwo(int **arr, int **tempArr, int x, int y, int n)
{
    int k = 0;
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 9; j++)
        {
            arr[i][j] = *tempArr[k];
            k++;
        }
}

void Merge(int* a, int low, int high, int mid)
{
    int i, j, k;
    int *temp = new int[high - low + 1];
    i = low;
    k = 0;
    j = mid + 1;

    while (i <= mid && j <= high)
    {
        if (a[i] < a[j])
        {
            temp[k] = a[i];
            k++;
            i++;
        }
        else
        {
            temp[k] = a[j];
            k++;
            j++;
        }
    }
    while (i <= mid)
    {
        temp[k] = a[i];
        k++;
        i++;
    }
    while (j <= high)
    {
        temp[k] = a[j];
        k++;
        j++;
    }

    for (i = low; i <= high; i++)
    {
        a[i] = temp[i - low];
    }
}

void MergeSort(int** a, int low, int high)
{
    int mid;
    if (low < high)
    {
        mid = (low + high) / 2;
        MergeSort(a, low, mid);
        MergeSort(a, mid + 1, high);

        Merge(*a, low, high, mid);
    }
}

int main()
{

    int x(0), y(0);
    int *arr = new int[x][y];
    int n = x * y;
    int *tempArr = new int[n];

    fillArr(&arr, x, y);
    twoDimToOne(&arr, &tempArr, x, y, n);
    cout << "Unsorted array: " << endl;
    coutArr(&arr, x, y);

    MergeSort(&tempArr, 0, n - 1);
    oneDimToTwo(&arr, &tempArr, x, y, n);
    cout << endl << endl << "Sorted array: " << endl;
    coutArr(&arr, x ,y);

    system("pause");
    return 0;
}

Ответы (0 шт):