qsort无限循环导致错误C.

时间:2016-06-01 18:13:01

标签: c infinite-loop qsort

所以我坚持使用这种排序函数,因为当我调试它时,一切似乎都运行正常,并且没有任何错误或警告,但它会以某种方式卡在无限循环中。

我的结构(如果它有帮助):

typedef struct raeume{
char number[5];
char klasse[6];
int tische;
}raeume;

我开始使用qsort函数:

void ausgabesortiert(struct raeume *arr[],int used,int size)
{
    qsort(*arr,size,sizeof(raeume),cmp);
    ausgabesortiert(arr,size,used);
}

我的比较功能:

int cmp(const void * a, const void * b)
{
    raeume *raumA = (raeume *) a;
    raeume *raumB = (raeume *) b;
    int tempA = raumA->klasse[0] - '0';
    int tempB = raumB->klasse[0] - '0';
    if(tempA < tempB)
    {
        return -1;
    }
    else if(tempA > tempB)
    {
        return 1;
    }
    else if(tempA == tempB)
    {
        if(raumA->tische > raumB->tische)
        {
            return -1;
        }
        else if(raumA->tische < raumB->tische)
        {
            return 1;
        }
        else if(raumA->tische == raumB->tische)
        {
           return 0;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:3)

宣布您的ausgabesortiert功能

void ausgabesortiert(struct raeume *arr[],int used,int size)

清楚地表明数组arr包含指针struct raeume个对象,而不是对象本身。

但致电qsort

qsort(*arr,size,sizeof(raeume),cmp);

和比较函数的编写就好像您要尝试从struct raeume位置开始对arr[0]个对象本身进行排序。

虽然这里没有任何正式的无效,但它仍然看起来很奇怪。这真的是你的意图吗?你到底想要再次排序的是什么? arr数组或arr[0]指向的其他数组?我怀疑它是前者,在这种情况下你需要修复qsort调用和比较函数。