Я пытаюсь сортировать массив записей структуры. По какой-то причине основной дамп продолжает происходить.C qsort массив вложенных структур
Когда я пытаюсь сделать то же самое с массивом ints или structs, он отлично работает. Однако, когда я начинаю использовать вложенные структуры, он начинает сбрасывать ядро.
Текущий результат:
Before sorting
first last 0
first last 1
first last 2
first last 3
first last 4
first last 5
AFTER sorting
Segmentation fault (core dumped)
Компилятор: Cygwin
typedef struct {
char last[NAMESIZE]; /* last name (1 word) */
char first[NAMESIZE]; /* first name (1 word) */
} name;
typedef struct {
name name;
int score; /* score (between 0 & 100 inclusive) */
} record;
int compare (const void * a, const void * b){
const record *recordA = (record *)a;
const record *recordB = (record *)b;
printf("%d: %d", recordA->score, recordB->score);
return (recordB->score - recordA->score);
}
int main(){
record ** list;
int i;
list=malloc(6*sizeof(record*));
printf("Before sorting\n");
for(i=0; i<6; i++){
list[i]=malloc(sizeof(record));
strcpy(list[i]->name.first,"first");
strcpy(list[i]->name.last,"last");
list[i]->score=i;
}
for (i=0; i<6; i++){
printf ("%s %s %d\n",list[i]->name.first, list[i]- >name.last,list[i]->score);
}
printf("AFTER sorting\n");
qsort (list, 6, sizeof(record), compare);
for (i=0; i<6; i++){
printf ("%s %s %d\n",list[i]->name.first, list[i]- >name.last,list[i]->score);
}
return 0;
}
У вас нет массива 'struct record' в вашем коде. У вас есть массив указателей * для 'struct record'. И это то, что вы пытаетесь «qsort». Итак, все остальное в вашем коде должно быть переписано соответствующим образом. Вы неправильно вызываете 'qsort'. Функция сравнения неверна. – AnT