qsort on an array of pointers to Objective-C objects

Posted by ElBueno on Stack Overflow See other posts from Stack Overflow or by ElBueno
Published on 2010-04-02T00:59:03Z Indexed on 2010/04/02 1:03 UTC
Read the original article Hit count: 740

Filed under:
|

I have an array of pointers to Objective-C objects. These objects have a sort key associated with them. I'm trying to use qsort to sort the array of pointers to these objects. However, the first time my comparator is called, the first argument points to the first element in my array, but the second argument points to garbage, giving me an EXC_BAD_ACCESS when I try to access its sort key.

Here is my code (paraphrased):

- (void)foo:(int)numThingies {
    Thingie **array;
    array = malloc(sizeof(deck[0])*numThingies);

    for(int i = 0; i < numThingies; i++) {
        array[i] = [[Thingie alloc] initWithSortKey:(float)random()/RAND_MAX];
    }

    qsort(array[0], numThingies, sizeof(array[0]), thingieCmp);
}

int thingieCmp(const void *a, const void *b) {
    const Thingie *ia = (const Thingie *)a;
    const Thingie *ib = (const Thingie *)b;

    if (ia.sortKey > ib.sortKey) return 1; //ib point to garbage, so ib.sortKey produces the EXC_BAD_ACCESS
    else return -1;
}

Any ideas why this is happening?

© Stack Overflow or respective owner

Related posts about qsort

Related posts about objective-c