【发布时间】:2016-07-15 16:33:51
【问题描述】:
当我尝试运行程序时收到一条消息。为什么?
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会太大并导致超出范围的访问,从而调用未定义的行为。 -
用-g编译程序并在gdb下运行,这会告诉你哪里出错了
-
尝试使用bubble sort 方法(就像使用here 对数组进行升序排序一样)
标签: c arrays sorting while-loop bubble-sort