You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于32位无符号整数比较的qsort排序失败问题求助

问题排查:qsort排序结构体数组失败的原因

嘿,这个问题我太熟悉了——你在调用qsort时的元素个数计算完全错误,这是C语言里指针和数组混淆的典型坑!

核心错误分析

你写的qsort调用是这样的:

qsort(array, (size_t)(sizeof(array)/sizeof(struct edge)), sizeof(struct edge), struct_cmp_by_v1);

这里的第二个参数是用来告诉qsort数组里有多少个元素,但你用了sizeof(array)——注意,array是struct edge*类型的指针,不是静态数组!

在C语言里:

  • 当sizeof作用于静态数组名时,返回的是整个数组的总字节数
  • 但当sizeof作用于指针时,返回的是指针本身的大小(32位系统是4字节,64位是8字节)

所以你计算出来的元素个数其实是指针大小 / 结构体大小,这显然和你实际分配的Narray个元素完全不符。qsort要么只排序了前几个元素,要么因为传入的元素个数太小,大部分元素根本没被处理,最终导致排序看起来“失败”。

修复方法

你已经用Narray来分配内存了,直接把qsort的第二个参数改成Narray就行:

qsort(array, Narray, sizeof(struct edge), struct_cmp_by_v1);

额外确认:你的比较函数是正确的

顺便说一句,你的struct_cmp_by_v1函数写得没问题:它正确地将void*转换为struct edge*,并且按照无符号整数的大小关系返回了合法的-1/0/1,这部分不需要修改。

内容的提问来源于stack exchange,提问作者Ivan Pereyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:25