• 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 (350,440 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 807 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ź 122 wizyt
pytanie zadane 8 stycznia 2019 w C i C++ przez Nast Początkujący (270 p.)

93,164 zapytań

142,176 odpowiedzi

321,933 komentarzy

62,491 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 662p. - Łukasz Eckert
  5. 649p. - Michal Drewniak
  6. 641p. - rucin93
  7. 621p. - Dawid128
  8. 572p. - ssynowiec
  9. 521p. - Piotr Aleksandrowicz
  10. 498p. - Michał Telesz
  11. 490p. - Hubert Chęciński
  12. 457p. - Marcin Putra
  13. 437p. - nidomika
  14. 432p. - rafalszastok
  15. 427p. - Adrian Wieprzkowicz
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!

...