我想将主函数中输入的二维数组的值通过函数调用放到一个新数组中,但是一直报错

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
static int cz[MAX][MAX];
static int cc[MAX][MAX];
static int cd[MAX][MAX];
static int r[MAX][MAX];
void initc(int x[][MAX],int y[][MAX],int n)
{ 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            x[i][j]=y[i][j];
        }        
    } 
}

int main()
{
    int  i,j,N;
    printf("选择要输入几阶矩阵\n"); 
    scanf("%d",&N); 
    int** r;int** c;
    printf("请输入关系矩阵真值(0或1):\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
      {
          scanf("%d",&r[i][j]);  
      }
      
    } //输出矩阵;
        for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            if(r[i][j]!=0&&r[i][j]!=1)
            {
                printf("输错了");
                return 0; 
            }
        }
    }
int cz[N][N],cd[N][N],cc[N][N];
   cz=initc (cz,r,N);
//求自反闭包 
for(i=0;i<N;i++)
    {
        cz[i][i]=1;//将主对角线全部改为1
    }
printf("自反闭包的矩阵"); 

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

initc函数返回为void,你这么写成 cz = initc(cz,r,N);呢?
r和c是指针的指针,指针只是一个地址存储,你得给它们分配空间才行。而且你明明上面已经定义了四个全局变量数组,完全够用了,不需要再定义这两个指针的,直接用全局变量cc和r。同样45行的三个临时变量删除掉,全局都已经定义了,怎么又定义一堆临时变量呢
修改一下:

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
static int cz[MAX][MAX];
static int cc[MAX][MAX];
static int cd[MAX][MAX];
static int r[MAX][MAX];
void initc(int x[][MAX],int y[][MAX],int n)
{ 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            x[i][j]=y[i][j];
        }        
    } 
}
int main()
{
    int  i,j,N;
    printf("选择要输入几阶矩阵\n"); 
    scanf("%d",&N); 
    printf("请输入关系矩阵真值(0或1):\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&r[i][j]);  
        }
    } //输出矩阵;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            if(r[i][j]!=0&&r[i][j]!=1)
            {
                printf("输错了");
                return 0; 
            }
        }
    }
    initc (cz,r,N);
    //求自反闭包 
    for(i=0;i<N;i++)
    {
        cz[i][i]=1;//将主对角线全部改为1
    }
    printf("自反闭包的矩阵"); 
    return 0;
}

(1)第24行的int ** r;int ** c;都没有申请内存,就在30行中使用了,肯定会崩的
(2)第8行的initc函数返回值是void,在46行中反而有返回值了,cz=initc (cz,r,N); 改成 initc (cz,r,N);
(3)如果你的编译器是Visual Studio,第45行 int cz[N][N],cd[N][N],cc[N][N];这里也会保存,标准C中不允许使用变量定义数组大小


代码修改如下

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
static int cz[MAX][MAX];
static int cc[MAX][MAX];
static int cd[MAX][MAX];
static int r[MAX][MAX];
void initc(int x[][MAX],int** y ,int n)
{ 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            x[i][j]=y[i][j];
        }        
    } 
}
int main()
{
    int  i,j,N;
    printf("选择要输入几阶矩阵\n"); 
    scanf("%d",&N); 
    int** r;//int** c;
    r = new int*[N];
    printf("请输入关系矩阵真值(0或1):\n");
    for(i=0;i<N;i++)
    {
        r[i] = new int[N];
        for(j=0;j<N;j++)
        {
            scanf("%d",&r[i][j]);  
        }
    } //输出矩阵;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            if(r[i][j]!=0&&r[i][j]!=1)
            {
                printf("输错了");
                return 0; 
            }
        }
    }
    //int cz[N][N],cd[N][N],cc[N][N];
    int cz[MAX][MAX],cd[MAX][MAX],cc[MAX][MAX];
    initc (cz,r,N);
    //求自反闭包 
    for(i=0;i<N;i++)
    {
        cz[i][i]=1;//将主对角线全部改为1
    }
    printf("自反闭包的矩阵"); 



    //释放r的内存
    for(i=0;i<N;i++)
    {
        delete[] r[i];
        r[i]=0;
    }
    delete[] r;
    r=0;
    return 0;
}