原代碼三大致命錯誤
if(array = NULL):條件判斷誤寫為賦值,導致 array 歸零,後續解引用崩潰。正確 if(array == NULL)。
scanf("%d", array + i) 缺少 &:array + i 是 int* 正確,但原代碼 scanf("%d", a[i]) 缺 &。正確寫法 scanf("%d", &array[i]) 或 scanf("%d", array + i)。
printf("%d\n", &array + i):&array 是 int(*)[N],加 i 跳過整個數組。正確 printf("%d\n", array[i]) 或 printf("%d\n", *(array + i))。
修正後完整代碼
#include
#include
int cmp(const void* a, const void* b) {
return (*(int*)a > *(int*)b) - (*(int*)a < *(int*)b);
}
int main() {
int n;
printf("How many values? ");
if (scanf("%d", &n) != 1 || n <= 0) {
puts("Illegal number.");
return 1;
}
int* a = malloc(n * sizeof(int));
if (a == NULL) { puts("Memory failed."); return 1; }
for (int i = 0; i < n; i++) {
printf("? ");
if (scanf("%d", &a[i]) != 1) { puts("Input error."); free(a); return 1; }
}
qsort(a, n, sizeof(int), cmp);
for (int i = 0; i < n; i++) printf("%d\n", a[i]);
free(a);
return 0;
}