Witam,
Piszę obecnie program, który wczyta dane dowolnej liczby osób, a potem na żądania uzytkownika je wyswietli.
Mam problem ze zmianą rozmiaru tablicy, tak aby mozna było zapisać dowolną ilość danych (po uruchomieniu w pewnym momencie pojawia się: terminate called after throwing an instance of 'std::bad_alloc'what(): std::bad_alloc)
Mój kod:
#include <iostream>
using namespace std;
struct Dane
{
string imie;//docelowo ma być więcej danych (nazwisko, wiek itp), stąd struktura.
};
Dane *zwieksz_ksiazke(Dane *ksiazka, int *rozmiar)//podwaja rozmiar tablicy
{
*rozmiar= (*rozmiar)*2;
Dane *nowa_ksiazka=new Dane[*rozmiar];
for(int i=0;i< *rozmiar;i++)
{
nowa_ksiazka[i]=ksiazka[i];
}
delete[]ksiazka;
return nowa_ksiazka;
}
Dane wczytaj_pozycje(Dane &pozycja,int nr_pozycji)
{
cout<<"podaj imie nr: "<<nr_pozycji<<" \n";
cin>>pozycja.imie;
return pozycja;
}
void wczytaj_ksiazke(Dane *ksiazka,int *rozmiar)//wczytuje imiona dopóki uzytkownik nie wybierze 0.
{
int wybor=1;
int nr_pozycji=1;
while(wybor!=0)
{
if(nr_pozycji<=*rozmiar)
{
wczytaj_pozycje(ksiazka[nr_pozycji-1],nr_pozycji);
nr_pozycji++;
cout<<"wybierz 1 dla dalszego wczytywania, 0 aby zakonczyc: ";
/*po wyborze 1 pojawia się w konsoli komunikat:terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc*/
cin>>wybor;
}
else
{
ksiazka=zwieksz_ksiazke(ksiazka,rozmiar);
}
}
cout<<"zakonczono";
}
int main()
{
int rozmiar=1;
Dane *ksiazka=new Dane[rozmiar];
wczytaj_ksiazke(ksiazka,&rozmiar);
return 0;
}
Z góry dzięki za pomoc!