You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言读取数组值并排序时出现Segmentation Fault的问题排查求助

解决C语言数组排序的Segmentation Fault问题

嘿,我一眼就揪出问题所在啦!你的排序循环里犯了个小疏忽,直接导致数组越界访问,触发了段错误。

错误原因分析

看你嵌套的排序循环部分:

for (i = 1; i < 10; i++) {
    for (j = i + 1; j < 10; i++) { // 这里的i++完全写错了!
        if (arr[i] > arr[j]) {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}

内层循环的增量部分你写成了i++,但这应该是j++啊!这会引发连锁问题:

  • 外层循环的i会在每次内层循环时被额外递增,很快就会超过数组的最大下标9(你的数组arr只有10个元素,下标范围是0到9)
  • 当i大于9时,arr[i]就会访问数组之外的非法内存空间,这在C语言里属于未定义行为,直接触发Segmentation Fault。

修正后的代码

把内层循环的i++改成j++就搞定了,另外我还顺手把外层循环的起始值改成了0(逻辑上更严谨,能确保第一个元素也参与排序):

#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 = 0; i < 10; i++) {
        for (j = i + 1; j < 10; j++) {
            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;
}

验证效果

现在输入10个数字,程序就能正常输出升序排列的结果,再也不会出现段错误啦!

内容的提问来源于stack exchange,提问作者sumit patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:12:31