Popatrz co się dzieje w funkcji "zwiekszenie_obydwu_tablic_krok2":
void zwiekszenie_obydwu_tablic_krok2(notatnik* tymczasowa_tablica,int nowy_rozmiar)
{
notatnik *tablica = new notatnik[nowy_rozmiar];
for (int i = 0; i < nowy_rozmiar; i++)
{
tablica[i].imie = tymczasowa_tablica[i].imie;
tablica[i].ilosc_dni = tymczasowa_tablica[i].ilosc_dni;
}
delete [] tymczasowa_tablica;
}
Masz wyciek pamięci, bo tworzysz nową tablicę dynamicznie "tablica", do której tracisz wskaźnik po wyjściu z funkcji. Pamiętaj, że wskaźnik "tablica" w funkcji "zwiekszenie_obydwu_tablic_krok2" to nie to samo co "tablica" w funkcji "main".
W ogóle ten program można lepiej zrobić. Z tego co widzę, chcesz zwiększyć rozmiar tablicy 2x.
Zrób to tak:
notatnik* zmienRozmiar(notatnik *tab, int staryRozmiar, int nowyRozmiar);
int main()
{
notatnik *tablica = new notatnik[rozmiar];
// kiedy chcesz rozszerzyc tablice
tablica = zmienRozmiar(tablica, rozmiar, rozmiar*2);
rozmiar *= 2;
}
notatnik* zmienRozmiar(notatnik *tab, int staryRozmiar, int nowyRozmiar)
{
notatnik *nowaTablica = new notatnik[nowyRozmiar];
memcpy(nowaTablica, tab, std::min(staryRozmiar, nowyRozmiar)*sizeof(notatnik));
delete [] tab;
return nowaTablica;
}
Ten kod działa tak: masz aktualny rozmiar i tablicę. Kiedy chcesz ją zmniejszyć/zwiększyć, to:
Tworzysz nową tablicę "nowaTablica" o nowym rozmiarze.
Kopiujesz funkcją "memcpy" dane ze starej tablicy - pierwszy argument to docelowa tablica, drugi to źródłowa a trzeci to liczba bajtów do skopiowania (std::min(staryRozmiar, nowyRozmiar) sprawia, że funkcja "zmienRozmiar" poprawnie może również zmniejszyć rozmiar). Ilość bajtów do skopiowania to staryRozmiar * ilość bajtów, która zajmuje struktura "notatnik", a to można uzyskać przez "sizeof(notatnik)". Po tym skopiowaniu danych można usunąć starą tablicę a zwrócić nowy wskaźnik.