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

Problem z dynamicznym alokowaniem tablicy dla struktury

Object Storage Arubacloud
0 głosów
158 wizyt
pytanie zadane 7 grudnia 2019 w C i C++ przez mgmike1011 Nowicjusz (150 p.)

Witam, mam problem z dynamicznym alokowaniem tablicy dla stworzonej przeze mnie struktury. Czy ktoś mógłby pokazać mi gdzie jest błąd i dlaczego w taki sposób kod nie chce działać? Dodam, że gdy zamiast wskaźnika użyję "const int" wszystko działa w najlepszym porządku, a przy takim kodzie jak poniżej cały program zacina się po podaniu pierwszego imienia. Z góry dziękuję za pomoc.

#include <iostream>

using namespace std;

struct Kontakty
{
        string imie;
        string nazwisko;
        int wiek;
        string nr_tel;
};
int zakres;
Kontakty* tab = new Kontakty[zakres];

void Wprowadz_imie(int i)
{
    cout<<"Prosze podac imie: ";
    cin>>tab[i].imie;
}
void Wprowadz_nazwisko(int i)
{
    cout<<"Prosze podac nazwisko: ";
    cin>>tab[i].nazwisko;
}
void Wprowadz_wiek(int i)
{
    cout<<"Prosze podac wiek: ";
    cin>>tab[i].wiek;
}
void Wprowadz_telefon(int i)
{
    cout<<"Prosze podac numer telefonu: ";
    cin>>tab[i].nr_tel;
    cout<<endl;
}
void Wprowadz_dane()
{
    for(int i=0; i<zakres; i++)
    {
        Wprowadz_imie(i);
        Wprowadz_nazwisko(i);
        Wprowadz_wiek(i);
        Wprowadz_telefon(i);
    }
}
void Pokaz_dane()
{
    for(int i =0;i<zakres;i++)
    {
        cout<<"Imie: "<<tab[i].imie<<endl;
        cout<<"Nazwisko: "<<tab[i].nazwisko<<endl;
        cout<<"Wiek: "<<tab[i].wiek<<endl;
        cout<<"Numer telefonu: "<<tab[i].nr_tel<<endl;
        cout<<endl;
    }
}

int main()
{
    cout<<"Wprowadz liczbe dla tablicy: ";
    cin>>zakres;
    Wprowadz_dane();
    Pokaz_dane();
    delete [] tab;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 7 grudnia 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 7 grudnia 2019 przez mgmike1011
 
Najlepsza
int zakres;
Kontakty* tab = new Kontakty[zakres];

Masz tu zmienną `zakres` bez przypisanej wartości (to zmienna globalna, więc domyślnie 0), po czym od razu próbujesz alokować tablicę o tym rozmiarze. To, że w dalszym miejscu kodu robisz `cin>>zakres`, nie oznacza, że wszystkie miejsca "magicznie" zauważą że `zakres` się zmienił i zmieni się rozmiar tablicy.

Musisz najpierw pobrać `zakres` od użytkownika, a dopiero wtedy zaalokować tablicę z użyciem `new`.

(btw, polecam nie używać zmiennych globalnych :/ )

komentarz 7 grudnia 2019 przez mgmike1011 Nowicjusz (150 p.)

I wszystko stało się nagle jasne laugh Bardzo dziękuję.

Podobne pytania

+1 głos
2 odpowiedzi 723 wizyt
0 głosów
1 odpowiedź 171 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez pozdro600 Początkujący (260 p.)
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 8 stycznia 2019 w C i C++ przez Nast Początkujący (270 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...