У меня есть эта простая программа bubblesort, которая при компиляции в macOs работает корректно, но при компиляции в linux (с gcc) выдает ошибку сегментации во время выполнения.
Я хотел бы понять, почему.
#include <stdio.h>
#include "alg_utils.h"
void bubble_sort(int *, int);
int main() {
int array[10] = {5, 10, 77, 1, -2, -61, 18, 14, 57, 7};
bubble_sort(array, 10);
print_array(array, 10);
return 0;
}
void bubble_sort(int *array, int len) {
int i, j;
for (i=0; i < len; i++) {
for (j=0; j < len; j++) {
if (array[j] < array[j-1])
swap(&array[j], &array[j-1]);
}
}
}
На Mac:
~/Projects/Algorithms: gcc Bubblesort.c
~/Projects/Algorithms: ./a.out
-2 0 1 5 7 10 14 18 57 77%
В Linux:
root#f95445bcd4e7:~/algos$ gcc Bubblesort.c
root#f95445bcd4e7:~/algos$ ./a.out
Segmentation fault
alg_utils.h имеет только определение функций swap () и print_array (). Ничего сумасшедшего.
void print_array(int *, int);
void swap(int *, int *);
void swap(int *a, int *b) {
int temp = *b;
*b = *a;
*a = temp;
}
void print_array(int *array, int len) {
int i;
for (i=0; i < len; i++) {
printf("%4d", array[i]);
}
}
Когда я меняю main () на main (int argc, char * argv []), это также работает и в linux.
Linux (с main (int argc, char * argv [])
root#f95445bcd4e7:~/algos$ gcc Bubblesort.c
root#f95445bcd4e7:~/algos$ ./a.out
-2 1 1 5 7 10 14 18 57 77
Так что я подумал: linux не любит main без параметров ... но тогда простой привет мир, подобный этому, работает просто отлично.
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
Итак, я запутался. Что это? Может быть, alg_utils? Может быть разные реализации c? Я пытался скомпилировать с -std = c99 (и другими комбинациями) безрезультатно.
У кого-нибудь есть подсказка? Заранее спасибо