Я думаю, одна ошибка лежит прямо в строке
qsort(array[0], numThingies, sizeof(array[0]), thingieCmp);
Попробуйте
qsort(&array[0], numThingies, sizeof(array[0]), thingieCmp);
или даже
qsort(array, numThingies, sizeof(array[0]), thingieCmp);
вместо этого. Компилятор здесь не будет жаловаться, поскольку qsort
должен принимать void*
, а вы передаете ему Thingy*
, который по закону может быть приведен к void*
без предупреждения, но вы действительно хотите, чтобы qsort
работал весь массив, который имеет тип Thingy**
.
Другое дело: компаратор будет вызываться с указателями на слоты массива в качестве аргументов, так что вы получите на самом деле Thingy**
:
int
thingieCmp(void* a, void* b)
{
Thingie *ia = *((Thingie**)a);
Thingie *ib = *((Thingie**)b);
...
}