C语言由实参传来一个矩阵A[M][N],按列输出它每一列上最大值和最小值的差

题目如下:编写函数,由实参传来一个矩阵A[M][N],按列输出它每一列上最大值和最小值的差。 当我用这个函数的时候,一直显示错误,我并没有使用指针,报错内容里面却有指针内容是怎么回事?应该怎么修改这一行呢?(就是
cha(a,m,n)那一行报错

#include <stdio.h>
int main()
{int m,n,a[m][n],i,j;
void cha(int b[10][10],int m,int n);
printf("请输入行列数m和n");
scanf("%d%d",&m,&n);
printf("请输入数:");
{
for(i=0;i<m;i++)
  {for(j=0;j<n;j++)
  scanf("%d",&a[i][j]);
  }
cha(a,m,n);}
return 0;
} 
void cha(int b[10][10],int m,int n)
{int max,min,i,j;
for(j=0;j<n;j++)
{max=b[0][j];
min=b[0][j];
for(i=0;i<m;i++)
{if(max<b[i][j])
max=b[i][j];
if(min>b[i][j])
min=b[i][j];
}
printf("第%d列最大值与最小值的差为:%d",j+1,max-min);
}
}

以下回答参考GPT并且由Bony-整理:
在主函数中定义二维数组a时,使用了变量m和n,但是m和n并没有初始化,这样定义数组是不正确的,应该先输入m和n,再定义数组a。另外,在主函数中调用cha函数时,应该传递已经定义并初始化好的二维数组a作为参数,而不是定义一个没有初始化的二维数组c作为参数。

以下是修改后的代码:

#include <stdio.h>

void cha(int b[10][10],int m,int n);

int main()
{
    int m,n,i,j;
    printf("请输入行列数m和n:");
    scanf("%d%d",&m,&n);
    int a[m][n];
    printf("请输入数:");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    cha(a,m,n);
    return 0;
}

void cha(int b[10][10],int m,int n)
{
    int max,min,i,j;
    for(j=0;j<n;j++)
    {
        max=b[0][j];
        min=b[0][j];
        for(i=0;i<m;i++)
        {
            if(max<b[i][j])
                max=b[i][j];
            if(min>b[i][j])
                min=b[i][j];
        }
        printf("第%d列最大值与最小值的差为:%d\n",j+1,max-min);
    }
}