首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取数组值并在c. c.中对数组排序时分割故障?

取数组值并在c. c.中对数组排序时分割故障?
EN

Stack Overflow用户
提问于 2021-03-09 14:42:32
回答 2查看 54关注 0票数 1

我编写这段代码是为了从数组中的用户那里获取值并对其进行排序。取值后,表示分割错误。

代码语言:javascript
复制
#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;
}

这是输出:

代码语言:javascript
复制
 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-09 14:49:12

代码语言:javascript
复制
for(j=i+1;j<10;i++)
  {
    if(arr[i]>arr[j])
    {
      temp=arr[i];
      arr[i]=arr[j];
      arr[j]=temp;
    }
  }

在内循环中,您正在增量i的值,而不是试图访问超出界限的数组的j

票数 1
EN

Stack Overflow用户

发布于 2021-03-09 15:19:57

当您试图通过不属于您的程序访问内存时,就会发生核心转储/分段错误。

防止这种情况的一种方法是将i的值增加到9。因此,循环的if语句中的代码块将继续,直到数组的下标为9。

代码语言:javascript
复制
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;
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66549041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档