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