【发布时间】:2015-12-13 15:29:39
【问题描述】:
我一直在尝试使用 qsort() 对 ADT 的指针数组(名为 SSET)进行排序,但我得到了一个奇怪的结果。这是我的功能:
extern void sset_sort_sets(SSET *sets[], int n) {
qsort(sets, n, sizeof(SSET *), sset_cmp);
}
在sset_cmp() 中,我写了一个声明来打印出它正在比较的SSETs。
int sset_cmp(const void *a, const void *b){
SSET *pa = (SSET *) a;
SSET *pb = (SSET *) b;
printf("sset_cmp called:\n");
printf(" a = "); sset_display(pa);
printf(" b = "); sset_display(pb);
printf("\n");
// More stuff...
我创建了一个包含两个 SSETs 的数组(在 main() 中)
SSET *s[2];
int a[] = {-4, 0, 3, 3, 22};
int c[] = { 1, 2, 3, 4, 5};
s[0] = sset_from_array(c, n); // { 1 2 3 4 5 }
s[1] = sset_from_array(a, n); // { -4 0 3 22 }
int i;
printf("Before sort:\n");
for (i = 0; i < 2; i++)
sset_display(s[i]);
printf("\n");
sset_sort_sets(s, 2);
printf("After sort\n");
for (i = 0; i < 2; i++)
sset_display(s[i]);
但这是我在输出中得到的:
Before sort:
{ 1 2 3 4 5 }
{ -4 0 3 22 }
sset_cmp called:
a = { -1589621936 -4 0 3 22 }
b = { -1589621568 }
After sort
{ 1 2 3 4 5 }
{ -4 0 3 22 }
我想我在调用qsort() 时弄乱了指针,但我不确定如何。
我想我包含了所有相关的代码。告诉我你是否需要找到我的错误。
【问题讨论】: