我编写这段代码是为了从数组中的用户那里获取值并对其进行排序。取值后,表示分割错误。
#include <stdio.h>
int main()
{
int i, j, temp, x;
int arr[10] = { 11, 2, 4, 5, 6, 7, 8, 99, 0, 45 };
printf("\n Enter 10 numbers: ");
for (x = 0; x < 10; x++) {
scanf("%d", &arr[x]);
}
for (i = 1; i < 10; i++) {
for (j = i + 1; j < 10; i++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printf("\n Ascending Order of the array:\n");
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}这是输出:
clang-7 -pthread -lm -o main main.c
./main
Enter 10 numbers: 11
22
33
44
55
66
77
88
99
100
exited, segmentation fault发布于 2021-03-09 14:49:12
for(j=i+1;j<10;i++)
{
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}在内循环中,您正在增量i的值,而不是试图访问超出界限的数组的j。
发布于 2021-03-09 15:19:57
当您试图通过不属于您的程序访问内存时,就会发生核心转储/分段错误。
防止这种情况的一种方法是将i的值增加到9。因此,循环的if语句中的代码块将继续,直到数组的下标为9。
for (i = 1; i < 9; i++) {
for (j = i + 1; j < 10; i++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}https://stackoverflow.com/questions/66549041
复制相似问题