一道c语言习题,找了很久不知道错误在哪
程序有点长,但错误只在第二个函数,原题要求是对输入的十个数字进行处理,使第一个数字是最小的数字,最后一个数字是最大的数字,要求用指针处理,代码如下:
#include <stdio.h>
static void scan_f(int *str[]);
static void proce_ss(int *str[]);
static void print_f(int *str[]);
static int str1[10];
int main()
{
int i;
int *str[10];
for(i=0;i<10;i++)
str[i]=&str1[i];
scan_f(str);
proce_ss(str);
print_f(str);
return 0;
}
static void scan_f(int *str[])
{
int i;
printf("Please input ten numbers:");
for(i=0;i<10;i++)
scanf("%d",&str1[i]);
printf("\nthe original numbers are:");
for(i=0;i<10;i++)
printf("%d\t",*str[i]);
}
static void proce_ss(int *str[])
{
int i,k,*min=str[0],*max=str[0];
int*temp=NULL;
for(i=0;i<10;i++)
{
if(*min>*str[i])
{
min=str[i];
k=i;
}
}
if(k!=0)
{
temp=str[0];
str[0]=str[k];
str[k]=temp;
}
for(i=0;i<10;i++)
{
if(*max<*str[i])
{
max=str[i];
k=i;
}
}
if(k!=9)
{
temp=str[0];
str[0]=str[k];
str[k]=temp;
}
}
static void print_f(int *str[])
{
int i;
for(i=0;i<10;i++)
printf("%d\t",*str[i]);
}
排查后确定问题在proce_ss这个函数,运行时警告segmentation fault,应该是非法访问内存,求教问题在哪?
PS:因为是初学指针,这道习题本身是很简单的,我所写的算法都是围绕尽可能多用指针,所以算法很粗糙,见谅