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
相关产品推荐
相关产品推荐

