Bir dizi yapısal kayıt ayırmaya çalışıyorum. Bazı sebeplerden dolayı çekirdek bir döküntü oluşmaya devam ediyor.C iç içe geçmiş yapıların dizisi dizisi
Aynı şeyi bir dizi ints veya struct ile yapmayı denediğimde, gayet iyi çalışıyor. Ancak iç içe geçmiş yapıları kullanmaya başladığımda, çekirdek dökümüne başlar.
akım çıkışı:
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)
Derleyici:
list=malloc(6*sizeof(record*));
böylece geçmesi gerekiyor: 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;
}
Kodunuzda 'struct struct 'diziniz yok. Yapı kaydına * bir dizi * işaretçiniz var. Ve bu, qsort'a çalıştığınız şey. Yani, kodunuzdaki diğer her şey buna göre yeniden yazılmalıdır. 'Qsort' yanlış diyorsunuz. Karşılaştırma fonksiyonunuz yanlış. – AnT