读书人

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

发布时间: 2012-02-27 10:00:22 作者: rapoo

学习利用指针,获取二维数组中最大值,出这个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已经帮你修正了

读书人网 >C语言

热点推荐