Mam 2 struktury. Jedna jest zawarta w drugiej. Chcę zdefiniować tablicę struktur "team", z tablicą struktur "informacje_o_przeciwniku" w środku każdej struktury "team".
Chcę przydzielać pamięć do tych struktur dynamicznie.
Napisałem kod ,ale mi nie działa. Tzn, działa jak odpalam poprzez run, ale jak śledzę przebieg debuggerem to wyskakuję błąd:
"projekt_3_3 2179 cygwin_exception::open_stackdumpfile: Dumping stack trace to projekt_3_3.exe.stackdump"
Czy to co napisałem ma sens? Czy to co chcę zrobić jest możliwe? Czy jest inny sposób by osiągnać zamierzony efekt?
Potrzebuję trzymać informacje o drużynie sportowej i o meczach które rozegrała z innymi drużynami w jakiś sposób.
struct team{
char nazwa[51];
struct informacje_o_przeciwniku *rywal;
int punkty;
int roznica_bramek;
int bramki_zdobyte_w_sumie;
};
struct informacje_o_przeciwniku{
char przeciwnik[51];
int bramki_zdobyte;
int bramki_stracone;
};
int main(int argc, char** argv){
char temp_ch[51];
char temp_ch2[51];
char temp_ch3[51];
char temp_ch4[51];
int liczba_druzyn = 0;
int liczba_druzyn_w_sumie = 0;
struct team *druzyna;
struct team *temp;
druzyna = (struct team *) malloc(2 * sizeof (struct team));
druzyna->rywal = (struct informacje_o_przeciwniku *) malloc(2 * sizeof (struct team));
while (1){
printf(">");
if (strcmp(temp_ch, "q") == 0){
break;
}
scanf("%s", temp_ch);
if (strcmp(temp_ch, "new") == 0){
printf("Podaj liczbe druzyn: ");
scanf("%d", &liczba_druzyn);
liczba_druzyn_w_sumie += liczba_druzyn;
if ((temp = (struct team *) realloc(druzyna, liczba_druzyn_w_sumie * sizeof (struct team))) == NULL){
printf("Nie udało sie zaalokowac pamieci 1\n");
exit(EXIT_SUCCESS);
} else{
druzyna = temp;
}
for (int i = 0; i < liczba_druzyn_w_sumie; i++){
if (((temp + i)->rywal = (struct informacje_o_przeciwniku *) realloc(((druzyna + i)->rywal), (liczba_druzyn_w_sumie - 1) * sizeof (struct informacje_o_przeciwniku))) == NULL){
printf("Nie udało sie zaalokowac pamieci 2\n");
exit(EXIT_SUCCESS);
} else{
(druzyna + i)->rywal = (temp + i)->rywal;
}
}
for (int i = liczba_druzyn_w_sumie - liczba_druzyn; i < liczba_druzyn_w_sumie; i++){
printf("Druzyna %d: ", i - (liczba_druzyn_w_sumie - liczba_druzyn) + 1);
scanf("%s", &druzyna[i].nazwa);
}
goto koniec_petli;
}
}