• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
186 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 Mentor (351,140 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 809 wizyt
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez pozdro600 Początkujący (260 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 8 stycznia 2019 w C i C++ przez Nast Początkujący (270 p.)

93,187 zapytań

142,203 odpowiedzi

322,015 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2006p. - Michal Drewniak
  10. 1946p. - Adrian Wieprzkowicz
  11. 1901p. - Mikbac
  12. 1744p. - rafalszastok
  13. 1734p. - Anonim 3619784
  14. 1586p. - Dawid128
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...