风起鸿庄Nirvana 2021-08-05 14:11 采纳率: 85.7%
浏览 25
已结题

请问为什么这段动态分配内存的代码会出错


//读取一列整数,并按升序排列他们,最后打印这个列表
#include <stdlib.h>
#include <stdio.h>
int compare_integers(int const* a, int const* b)
{
    register int const* pa = a;
    register int const* pb = b;
    return *pa > *pb ? 1 : *pa < *pb ? -1 : 0;
}
int main()
{
    int *array;
    int n_values;
    int i;
    printf("How many values are there?");
    if (scanf("%d", &n_values) != 1 || n_values <= 0) {
        printf("Illegal number of values.\n");
        exit(EXIT_FAILURE);
    }
    *array=malloc(n_values * sizeof(int));
    if (array == NULL) {
        printf("Can't get memory for that many values.\n");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < n_values; i += 1) {
        printf("?");
        if (scanf("%d", array + i) != 1) {
            printf("Error reading value #%d\n", i);
            free(array);
            exit(EXIT_FAILURE);
        }
    }
    qsort(array, n_values, sizeof(int), compare_integers);
    for (i = 0; i < n_values; i += 1)
        printf("%d\n", array[i]);
    free(array);
    return EXIT_SUCCESS;
}

报错信息如下:

img

  • 写回答

1条回答 默认 最新

  • bostonAlen 2021-08-05 14:33
    关注

    函数原型要求你传递的函数指针是一个int(const void*,const void*)类型的

    void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
    

    所以可以将比较函数声明为

    int compare_integers(const void* _a , const void* _b)
    

    在函数中进行强转

    int* a = (int*)_a;    //强制类型转换
    

    完整的参考

    int num[100];
    int compare_integers(const void* _a , const void* _b)  //参数格式固定
    {
        int* a = (int*)_a;    //强制类型转换
        int* b = (int*)_b;
        return *a - *b;  
    }
    qsort(num,100,sizeof(num[0]),compare_integers); 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月17日
  • 已采纳回答 8月9日
  • 创建了问题 8月5日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度