首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-27 
学习利用指针,获取二维数组中最大值,出这个Segmentation Fault (core dumped)问题。#include Head.c#defi

学习利用指针,获取二维数组中最大值,出这个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     4int 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()
[解决办法]
你算法上没有实现那个功能啊。
------解决方案--------------------


printf("%d\n",&max_Value); //输入出最大值。
------------------
你这是准备做什么?
HelloDan已经帮你修正了

热点排行