Я пытаюсь сортировать массив указателей на structs (определение ниже) на основе значения, хранящегося в void * структуры «bucket», которые, как я знаю, являются int. Он компилирует и распечатывает мой массив ведер и их значения просто отлично, без ошибок и предупреждений, но на самом деле он не сортирует массив. Я использовал утверждения, чтобы попытаться найти где угодно, что может привести к ошибке с qsort.stdlib qsort сортировать массив указателей на структуру
Struct определения:
typedef struct _bucket{
void* val;
char *word;
}bucket;
typedef struct _root{
bucket **list;
int hashTableLength;
}root;
Сортировать Функция быть переданы функции QSort:
int sortFunc(const void *a, const void *b){
bucket *bucketA=(bucket*)a;
bucket *bucketB=(bucket*)b;
int bucketAVal = *((int*)bucketA->val);
int bucketBVal = *((int*)bucketB->val);
assert((bucketAVal&&bucketBVal)!=0);
return bucketAVal-bucketBVal;
}
Сортировка массива и печать:
void sort(root* inRoot, int(*sortFunc)(const void *a, const void *b)){
int length = inRoot->hashTableLength;
assert(length==11); //known length of hash array
for (int i = 0; i<length; i++)
assert(inRoot->list[i] != NULL);
qsort(inRoot->list, length, sizeof(bucket*), sortFunc);
for(int i =0; i<length; i++)
printf("%s was found %d times\n", inRoot->list[i]->word, *((int*)(inRoot->list[i]->val)));
return;
}