我的C程序操作已停止

时间:2017-09-27 12:58:29

标签: c

我编写并运行此代码来练习基本算法。但此程序操作已停止。有什么问题?

#include <stdio.h>
#include <stdlib.h>

int bans(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() 
{ 
    int m, i;
    int* arr;
    scanf("%d", &m);
    arr = (int*)malloc(sizeof(int) * m);
    for (i = 0; i < m; i++) {
        scanf("%d", arr[i]);
    }
    int n = sizeof(arr)/sizeof(arr[0]);
    for (i = 0; i < n; i++) printf("%d ", arr[i]);
    qsort(arr, n, sizeof(arr[0]), bans);
    for (i = 0; i < n; i++) printf("%d ", arr[i]);
    free(arr);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

  1. scanf需要指针arr[i]arr + i就足够了。

  2. sizeof(arr)实际上是sizeof(int*)。使用m表示元素数量。您使用的习惯用法仅适用于数组类型,指针类型。

答案 1 :(得分:0)

主要问题在于声明

getters = {
  getLists: () => 'getLists'
}

其中 scanf("%d", arr[i]); 的类型为arr[i]。您需要将指针传递给类型(int),就像

一样
int

scanf("%d", &arr[i]);

将编译器警告启用到最高级别,编译器应警告您预期的类型不匹配。

之后,在这种情况下,

scanf("%d", arr+i);

是错误的,因为 int n = sizeof(arr)/sizeof(arr[0]); sizeof(arr)相同。根本不需要新的变量。使用sizeof (int *)