动态申请内存有关问题

动态申请内存问题
请教各位,若一个调用函数体内,动态申请了内存,在main函数中调用此函数返回一个指针后,调用函数内的动态内存如何释放?譬如下面的程序

Complex***   hanshu(Complex ***p)
{
        
    Complex ***Z=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(Z== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
Z[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(Z[i] == NULL)
{
printf("Malloc False");
}
        for( int j = 0; j< Ny1+1; j++)
{
Z[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
        if(Z[i][j] == NULL)
{
    printf("Malloc False");
}
}
}
    for(int i=0; i<Nx1+1; i++)   
    {
        for(int j=0; j<Ny1+1; j++)   
        { 
            for(int k=0;k<Nz1+1;k++)
            { 
                Z[i][j][k]=p[i][j][k];
          }
     }
     }
     return Z;
}
void main()
{
        Complex co (0,0);   
        Complex ***A=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(A== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
A[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(A[i] == NULL)
{
printf("Malloc False");
}
        for( int j = 0; j< Ny1+1; j++)
{
A[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
        if(A[i][j] == NULL)
{
    printf("Malloc False");
}
}
}
    
     Complex ***B=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(B== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
B[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(Z[i] == NULL)
{
printf("Malloc False");
}
        for( int j = 0; j< Ny1+1; j++)
{
B[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
        if(B[i][j] == NULL)
{
    printf("Malloc False");
}
}
}
    for(int i=0; i<Nx1+1; i++)   
    {
        for(int j=0; j<Ny1+1; j++)   
        {