• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Struktury w c++

Cloud VPS
0 głosów
784 wizyt
pytanie zadane 25 maja 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
zamknięte 25 maja 2020 przez dominik195k

Czesc, dostrzega ktos blad w tym kodzie? Zauwazylem ze caly program sypie sie konkretnie przez jedna linijke

a->klatki[i].pietra[j].mieszkania[k].numer = B;

A struktury wygladaja tak:

struct SMieszkanie
{
	int numer;
	float powierzchnia;
	float wysokosc;
	int liczba_pokoi;
};

struct SPietro
{	
	int nr_pietra;
	int ile_mieszkan;		
	SMieszkanie *mieszkania = new SMieszkanie[ile_mieszkan];
	
};

struct SKlatka
{
	int nr_klatki;
	int ile_pieter;
	SPietro *pietra = new SPietro[ile_pieter];	
};
struct SBlok
{
	string ulica;
	int numer;
	int ile_klatek;
	SKlatka *klatki = new SKlatka[ile_klatek];
};

Nie wywala zadnego errora ale kiedy dodaje ta linijke program zatrzymuje sie w pewnym momencie, i konczy dzialanie.

komentarz zamknięcia: problem rozwiazany
1
komentarz 25 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Pokazy csly kod. Ja dostrzegam problem myslowy: nie wiem czemu klatka i pietro to agregacja. I czemu klatka nie jest blokiem. Majac blok, ktory ma 2 klarki, to kazdy z nich ma inny numer, znajduja sie w tym samym budynku, ale maja inne adresy
komentarz 25 maja 2020 przez dominik195k Obywatel (1,030 p.)
To nie ja to wymyslalem, jest to z gory narzucone przez wykladowce, ja mam to z pliku sciagnac, i chodzi mi tylko o to czy ta linijka jest prawidlowo zapisana biorac pod uwage te struktury
komentarz 25 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Ale w ktorym momencie przestaje, tutaj problemem jest chyba odwolanie sie do pointera, ktory ma w sobie pointer, ten z kolei ma w sobie koleny itd i chyba trzeba by przeciazyc operator []. Ostatnio mialem chyba cos podobneo, ale nie jestem pewien
komentarz 25 maja 2020 przez dominik195k Obywatel (1,030 p.)
Wydaje mi sie ze wlasnie to tu jest problemem, jak to rozwiazac? Jak to inaczej zapisac zeby nie bylo takiego problemu?

1 odpowiedź

0 głosów
odpowiedź 25 maja 2020 przez Piotr Batko Stary wyjadacz (13,210 p.)
struct SPietro
{   
    int nr_pietra;
    int ile_mieszkan;       
    SMieszkanie *mieszkania = new SMieszkanie[ile_mieszkan];
};

Jak myślisz, jak duża tablica została zaalokowana w linii 5.? :)

komentarz 25 maja 2020 przez dominik195k Obywatel (1,030 p.)
edycja 25 maja 2020 przez dominik195k
   ///
komentarz 25 maja 2020 przez Piotr Batko Stary wyjadacz (13,210 p.)
Widzisz, dopiero w linijce 11. wpisujesz ile chciałbyś mieć mieszkań. A to już za późno, bo to j-te piętro z i-tej klatki już dawno zostało stworzone, (więc i tablica została zaalokowana).
komentarz 25 maja 2020 przez dominik195k Obywatel (1,030 p.)
Da sie to jakos zmodyfikowac, zeby sama forma kodu zostala mniej wiecej taka sama?
komentarz 25 maja 2020 przez Piotr Batko Stary wyjadacz (13,210 p.)

Nie wiem, bo nie wysłałeś mi całego kodu. Jeżeli inicjalizacja jest robiona źle, to cały program ma niezdefiniowane zachowanie i może robić co będzie chciał. Jeżeli jest robiona poprawnie, to bazując na tym kawałeczku który mi wysłałeś, możesz zdealokować te tablice o nie wiadomo jakich rozmiarach i zaalokować poprawne.

int juzZnanaLiczbaMieszkan;
std::cin >> juzZnanaLiczbaMieszkan;

// Usuwam nie wiadomo jak dużą tablicę
delete[] pietro.mieszkania;

// Alokuję poprawną, bo właśnie się
// dowiedziałem jak duża powinna być
pietro.mieszkania = new Mieszkanie[juzZnanaLiczbaMieszkan];

 

komentarz 25 maja 2020 przez dominik195k Obywatel (1,030 p.)
Dobra to juz jakos sobie z tym poradze przynajmniej widze gdzie lezy problem dzieki wielkie!

Podobne pytania

+1 głos
2 odpowiedzi 602 wizyt
pytanie zadane 10 marca 2021 w C i C++ przez huberos23 Nowicjusz (170 p.)
0 głosów
1 odpowiedź 280 wizyt
0 głosów
1 odpowiedź 1,355 wizyt
pytanie zadane 1 maja 2020 w C i C++ przez Atman Użytkownik (810 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...