C-在这个简单的程序中得到一个分段错误(内核转储)错误

C-在这个简单的程序中得到一个分段错误(内核转储)错误,c,segmentation-fault,C,Segmentation Fault,这是一个简单的程序,可以找到10数组中最小和最大的元素。我不确定为什么会出现分段错误(核心转储)错误 #包括 内部主(空){ int i,j,min,数组[10],max,n; //此循环获取用户对数组元素的输入 对于(i=0;i=0;j++){ if(最大值

这是一个简单的程序,可以找到10数组中最小和最大的元素。我不确定为什么会出现分段错误(核心转储)错误

#包括
内部主(空){
int i,j,min,数组[10],max,n;
//此循环获取用户对数组元素的输入
对于(i=0;i<10;i++){
printf(“输入元素编号%d:,i”);
scanf(“%d”和“&n”);
数组[i]=n;
}
最小值=数组[0];
max=数组[0];
//此循环查找数组中的最小元素
对于(j=0;j<10;j++){
如果(最小值>数组[j]){
min=数组[j];
}
}
//此循环查找数组中最大的元素
对于(j=9;j>=0;j++){
if(最大值<数组[j]){
max=数组[j];
}
}
printf(“最小值为:%d”,最小值);
printf(“最大值为:%d”,最大值);
返回0;
}
应该是

for(j = 9; j >= 0; j--)
如果要从最后一个迭代到第一个。您可以在第二次迭代中访问
array[10]
,这超出了范围

也没有理由从最后一个迭代到第一个,所以

for(j = 0; j < 10; j++)
(j=0;j<10;j++)的

这也行

您可以在单个for循环中完成整个工作(从stdin读取,查看它是否大于max/小于min),因此不需要阵列

for (j = 9; j >= 0; j++)
应该是

for(j = 9; j >= 0; j--)
如果要从最后一个迭代到第一个。您可以在第二次迭代中访问
array[10]
,这超出了范围

也没有理由从最后一个迭代到第一个,所以

for(j = 0; j < 10; j++)
(j=0;j<10;j++)的

这也行

您可以在单个for循环中完成整个工作(从stdin读取,查看它是否大于max/小于min),因此不需要阵列

for (j = 9; j >= 0; j++)
这里你从9开始做j++

这样做:

for (j = 9; j >= 0; j--)

顺便说一下,你可以这样做

scanf("%d", array + i);
这里你从9开始做j++

这样做:

for (j = 9; j >= 0; j--)

顺便说一下,你可以这样做

scanf("%d", array + i);

下面的循环试图指向超出指定内存空间的位置

for(j = 9; j >= 0; j++) 
试着写下:

for(j=9; j >= 0; j--) 
如果您愿意,您可以使用@mch建议的递增循环。
另外,建议在此处跳过使用变量
j
。您可以改用
i
。不会有任何问题,因为您正在循环中将
0
分配给它。您将节省4个宝贵的字节。

下面的循环试图指向超出指定内存空间的位置

for(j = 9; j >= 0; j++) 
试着写下:

for(j=9; j >= 0; j--) 
如果您愿意,您可以使用@mch建议的递增循环。
另外,建议在此处跳过使用变量
j
。您可以改用
i
。不会有任何问题,因为您正在循环中将
0
分配给它。您将节省4个宝贵的字节。

答案告诉您您的错误是,因此我将提示您其他事项:尝试找到一种只使用线性时间而不是二次时间来查找最小值和最大值的方法。@MeikVtune这里没有二次时间。。。你的意思是一次遍历而不是两次吗?@Quentin Yes:)答案告诉你你的错误是,所以我要暗示一些其他的东西:试着找到一种方法,你只使用线性时间来找到最小值和最大值,而不是二次时间。@MeikVtune这里没有二次时间。。。你是说一次而不是两次穿越吗?@Quentin是的:)