所以我被这个排序函数困住了,因为当我调试它的时候,一切看起来都很好,没有任何错误或警告,但是它不知何故陷入了无限循环。
我的结构(如果有用的话):

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;
}

最佳答案

您的ausgabesortiert函数的声明

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

很明显,数组arr包含指向struct raeume对象的指针,而不是对象本身。
但是呼叫qsort
qsort(*arr,size,sizeof(raeume),cmp);

而comparison函数的编写就好像您正试图对从struct raeume位置开始的arr[0]对象数组本身进行排序一样。
虽然没有什么形式上的无效,但看起来还是很奇怪。这真的是你的意图吗?你到底想重新分类什么?arr数组或由arr[0]指向的其他数组?我怀疑是前者,在这种情况下,您需要修复qsort调用和比较函数。

关于c - qsort无限循环导致错误C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37575970/

10-12 04:01