学习利用指针,获取二维数组中最大值,出这个Segmentation Fault (core dumped)有关问题

学习利用指针,获取二维数组中最大值,出这个Segmentation Fault (core dumped)问题。
#include "Head.c"
#define M 3
#define N 4
void main()
{
  int a[M][N];
  int *ptr ;

  for(int i=0 ; i<M;i++)
  {
  for(int j = 0;j < N ; j++)
  {
  printf("请输入第 %d 行第 %d 列数:",i+1,j+1);
  scanf("%d",a[i] + j);
  }//End for;
  }//End for

  ptr = a[0];

  int *Max_Array();

  int *max_Value ;

  max_Value = Max_Array(ptr,M*N); //返回最大数的指针

  printf("%d\n",&max_Value); //输入出最大值。

}//End main();


int *Max_Array(int *ptr,int number)
{
  int *maxValue = 0;
  for(int i = 0 ; i < number ; i++,ptr++)
  {
  // printf("number = %d,ptr = %d\n",number,*ptr);
  // printf("maxValue = %d\n",maxValue);
  if( *maxValue < *ptr ) -->这行出错。
  {
  printf("前第%d个数当中最大值 ptr = %d:\n",i+1,*ptr);
  maxValue = ptr ;

  printf("MaxValue = %d",*maxValue);
  }//End if;

  }//End for;

  return maxValue ;
}//End Max_Array()

学习利用指针,获取二维数组最大值。

大家帮我看一下,不知道为什么就输入完数之后

请输入第 1 行第 1 列数:1
请输入第 1 行第 2 列数:2
请输入第 1 行第 3 列数:3
请输入第 1 行第 4 列数:4
请输入第 2 行第 1 列数:5
请输入第 2 行第 2 列数:6
请输入第 2 行第 3 列数:7
请输入第 2 行第 4 列数:8
请输入第 3 行第 1 列数:9
请输入第 3 行第 2 列数:0
请输入第 3 行第 3 列数:11
请输入第 3 行第 4 列数:12
Segmentation Fault (core dumped) --出错信息。

不知道为什么 if( *maxValue < *ptr ) 会出错?


------解决方案--------------------
为什么把maxValue初始为0,让maxValue指向0地址? *maxValue尝试从0地址取数,被操作系统禁止了。

改成 int *maxValue = ptr; 应该就可以了
------解决方案--------------------
maxValue这个指针式个野指针,应当初始化指向。
------解决方案--------------------
………………
maxvalue的内存呢?
干嘛要用指针

把maxvalue和Max_Array的*都去掉
------解决方案--------------------
C/C++ code

#include<stdio.h>
#define   M     3
#define   N     4
int main()
{
    int   a[M][N];
    int   *ptr;
    int i,j;

    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("请输入第 %d 行第 %d 列数:",i+1,j+1);
            scanf("%d",a[i] + j);
        }//End   for;
    }//End   for

    ptr=a[0];

    int *Max_Array();

    int *max_Value;

    max_Value=Max_Array(ptr,M*N);     //返回最大数的指针

    printf("%d\n",*max_Value);               //输入出最大值。
    return 0;
}//End   main();


int *Max_Array(int *ptr,int number)
{
    int   *maxValue =ptr;
    int i;
    for(i= 0; i<number; i++,ptr++)
    {
    //             printf("number   =   %d,ptr   =   %d\n",number,*ptr);
    //             printf("maxValue   =   %d\n",maxValue);
        if(*maxValue< *ptr)               //  --> 这行出错。
        {
            printf("前第%d个数当中最大值ptr = %d:\n",i+1,*ptr);
            maxValue = ptr   ;

            printf("MaxValue=%d",*maxValue);
        }//End   if;

    }//End   for;

    return   maxValue ;
}//End   Max_Array()

------解决方案--------------------
你算法上没有实现那个功能啊。
------解决方案--------------------