【发布时间】:2018-06-12 11:38:47
【问题描述】:
我有一个结构:
typedef struct personalData
{
char name[20];
char * remarks;
int age;
float weight;
} personalData;
我需要使用qsort() 按重量对数据进行排序。这是我的weightSort 函数:
void weightSort(personalData * data[], int len)
{
qsort(data, len, sizeof(struct personalData *), structSortWeight);
}
其中len = 10(在使用一些不同的函数之前计算,但可能没关系),data[]定义在main():
struct personalData * data[10];
最后是structSortWeight:
int structSortWeight(const void *a, const void *b)
{
personalData *p1 = (personalData *)a;
personalData *p2 = (personalData *)b;
return (p1->weight - p2->weight);
}
我的程序在开始排序时崩溃。我想补充一点,当我将qsort() 中的第三个参数更改为sizeof(float) 时,它不会崩溃,但p1->weight 和p2->weight 指向一些垃圾。
main()中的调用函数:
weightSort(data, len);
personalData * data[] 已经分配了一些数据。
【问题讨论】:
-
如果问题是您目前所提供的片段所暗示的问题,那么您需要注意编译器的警告,如果您没有收到任何警告,请打开它们.
-
将
struct personalData * data[10];作为weightSort的第一个参数是不合法的。类型不兼容。你是怎么做到的?你的调用代码是什么样的? -
目前我没有收到任何错误,因为我已经更改了一些内容,这要归功于答案,并且程序没有崩溃,但指针仍然指向一些垃圾。我马上改一下代码。