プログラムを実行しようとするとメッセージが表示されます。どうして?配列をwhileとifでのみ並べ替える
Segmentation fault
私のコード:
#include <stdio.h>
void sort_array(int *arr, int s);
int main() {
int arrx[] = { 6, 3, 6, 8, 4, 2, 5, 7 };
sort_array(arrx, 8);
for (int r = 0; r < 8; r++) {
printf("index[%d] = %d\n", r, arrx[r]);
}
return(0);
}
sort_array(int *arr, int s) {
int i, x, temp_x, temp;
x = 0;
i = s-1;
while (x < s) {
temp_x = x;
while (i >= 0) {
if (arr[x] > arr[i]) {
temp = arr[x];
arr[x] = arr[i];
arr[i] = temp;
x++;
}
i++;
}
x = temp_x + 1;
i = x;
}
}
私はこの問題はif
文であると思います。 あなたはどう思いますか?それはなぜ起こるのですか?私は配列へのポインタを積極的に使うと思います。
ありがとうございました!
「i」が大きすぎるため、範囲外のアクセスが発生し、*未定義の動作*が発生します。 – MikeCAT
-gでプログラムをコンパイルしてgdbで実行すると、失敗した場所が表示されます – pm100
[bubble sort](https://en.wikipedia.org/wiki/Bubble_sort)メソッドを使用してみてください([ここで](http://www.sanfoundry.com/c-program-sort-array-ascending-order/)を使用して配列を昇順でソートする) – iRove