想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到有关问题

想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到问题
代码如下
C/C++ code

#include<iostream>
using namespace std;

int *SQUARE_MATRIX_MULTIPLY(int *A,int *B,int n)
{
    int *C=new int[n][n];
    for(int i=0;i<=n-1;i++)
        for(int j=0;j<=n-1;j++)
        {
            C[i][j]=0;
            for(int k=0;k<=n-1;k++)
                C[i][j]=C[i][j]+A[i][k]*B[k][j];
        }
    return C;
}

int main()
{
    
    int A[2][2]={{1,2},{3,4}},B[2][2]={{4,3},{1,2}};
    int *C=SQUARE_MATRIX_MULTIPLY(A,B,4);
    for(int i=0;i<=3;i++)
        for(int j=0;j<=3;j++)
            cout<<C[i][j]<<endl;
    return 0;
}



编译不通过,第一个报错显示函数中动态分配内存那句错了,求高手指点该如何对多维数组进行动态分布。还有如何阻止函数,使其结束时不会收回为数组C分配的内存。

------解决方案--------------------
何必用二维数组呢。。。。少年,直接用一维数组吧。。。

稍微给你提供个传参数模板方法吧,希望你能喜欢吧。。
几乎是用你的方法,只做了个别的改动
C/C++ code

#include<iostream>
using namespace std;

//模板方阵(ps:如果你还不了解模板是神马东东,请先百度C++模板,看懂了模板再回头看这个代码)
template < int M >
void SquareMatrixMultiply( int a[M][M], int b[M][M], int d[M][M] )
{   //之前的第三个参数可以用M来自动识别, 修改了一下,把数组直接传进来当假参数了
    //修改了一下变量名,另外把所有的n都替换成了模板数M
    for( int i = 0; i < M; i++ )
        for( int j = 0; j < M; j++ )
        {
            d[i][j] = 0;
            for( int k = 0; k < M; k++ )
                d[i][j] = d[i][j] + a[i][k] * b[k][j];
        }
}

int main()
{
    //只修改了变量名
    int arA[2][2] = { { 1, 2 },
                      { 3, 4 } }
       ,arB[2][2] = { { 4, 3 },
                      { 1, 2 } };
    int arD[2][2] = {0};    //把它修改作为参数
    //稍微修改函数
    SquareMatrixMultiply( arA, arB, arD );
    //输出稍微修改了一下
    for( int i=0; i < 2; i++ )
    {
        for( int j=0; j < 2; j++ )
            cout << arD[i][j] << ',';
        cout << endl;
    }
    return 0;
}