繁体   English   中英

C-qsort将错误的指针发送到比较器函数?

[英]C - qsort sends the wrong pointers to the comparator function?

我的问题是qsort似乎正在向比较器函数发送奇怪的指针。 如果我创建两个间隙并将其指针作为争论发送,则比较器函数本身似乎运行良好。 但是,即使间隙数组已正确初始化,调试时我也会得到错误的值。

如果这很重要,我将在Windows 10上运行代码。

间隙定义和比较器功能:

typedef struct open_space_t{
    ssize_t size;
    off_t start;
}Gap;

int GapComparator(const void * aa, const void * bb){
    ssize_t a = ((Gap*) aa)->size;
    ssize_t b = ((Gap*) bb)->size;

    if(a>b){
        return 1;
    }
    if(b>a){
        return -1;
    }
    else{
        return 0;
    }
}

运行qsort:

Gap** allGaps = malloc((2) * sizeof(*allGaps));
allGaps[0] = malloc(sizeof(*allGaps[0]));
allGaps[0]->size = 20;
allGaps[0]->start = 30044;
allGaps[1] = malloc(sizeof(*allGaps[0]));
allGaps[1]->size = 20;
allGaps[1]->start = 30064;
qsort(allGaps, 2, sizeof(*allGaps), GapComparator);

比较器接收到它应该比较的元素的指针。 您的数组元素是指针( Gap * )。 因此,比较器收到Gap **

固定:

int GapComparator(const void * aa, const void * bb){
    ssize_t a = (*(Gap**) aa)->size;
    ssize_t b = (*(Gap**) bb)->size;

或者:

int GapComparator(const void *aa, const void *bb) {
    const Gap **pa = aa, **pb = bb;
    ssize_t a = (*pa)->size;
    ssize_t b = (*pb)->size;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM