Witam,
mam problem z pewną sprawą dotyczącą wymuszenia zmiany wielkości tablicy za pomocą wpisywania przez użytkownika następnych wartości prosto do niej (Tablica na początku posiada 10 elementów, po czym zwiększa rozmiar dwukrotnie, jeśli zmienna nastepny_element (+ 1) wynosi nasz rozmiar - następuje skopiowanie wszystkiego, co znajduje się w "starej" tablicy, utworzenie nowej o żądanej wielkości i nadpisanie starej tą nową tak, że możemy dalej wpisywać nasze wartości do tablicy, aż nie osiągniemy limitu wielkości, po którym ponownie następuje dwukrotne zwiększenie i w kółko.
Kod:
#include <iostream>
#include <cstdlib>
using namespace std;
void drukujTablice(int *w_tablica, int rozmiar, int zajete_pola);
int *zwiekszTablice(int *w_tablica, int *rozmiar);
int main()
{
int nastepny_element = 0;
int rozmiar = 10;
int *w_tablica = new int[rozmiar];
int wartosc;
cout << "Podaj liczbe: ";
cin >> wartosc;
while( wartosc > 0 )
{
system("cls");
if(rozmiar == nastepny_element + 1)
{
w_tablica = zwiekszTablice(w_tablica, &rozmiar);
}
w_tablica[nastepny_element] = wartosc;
nastepny_element++;
cout << "Bierzace paramentry tablicy: " << endl;
drukujTablice(w_tablica, rozmiar, nastepny_element);
cout << "Podaj liczbe (0 - wyjscie z programu): ";
cin >> wartosc;
cout << "\n\n";
}
delete [] w_tablica;
}
void drukujTablice(int *w_tablica, int rozmiar, int zajete_pola)
{
cout << "Calkowity rozmiar tablicy: " << rozmiar << endl;
cout << "Liczba zajetych pol tablicy: " << zajete_pola << endl;
cout << "Wartosc w tablicy: \n\n";
for (int i = 0; i < zajete_pola; i++)
{
cout << "w_tablica[" << i << "] = " << w_tablica[i] << endl;
}
cout << "\n";
}
int *zwiekszTablice(int *w_tablica, int *rozmiar)
{
int przypisz = *rozmiar;
*rozmiar = przypisz * 2;
int *w_nowa_tablica = new int[*rozmiar];
for (int i = 0; i < *rozmiar; i++)
{
w_nowa_tablica[i] = w_tablica[i];
}
delete [] w_tablica;
return w_nowa_tablica;
}
Problem zaczyna się w momencie, w którym program dochodzi do 40 elementu, występuje błąd, tak jakby mój kod przestawał być właścicielem i nie miałby dostępu do tej pamięci i próbował dokonać dereferencji(?) [Przepraszam, jeśli piszę w zły sposób, jeszcze nie rozumiem alokacji pamięci w 100% i wszystkich zagadnień związanych z tymi podstawami)
Prosiłbym o wyrozumiałość, wciąż się uczę i co ciekawe, jest to kod zawarty w książce Alexa Allaina pdt. "Przewodnik dla początkujących".
Może tablica nie zwiększa się, bo typ danych na to nie pozwala? Chociaż ta opcja wydaje mi się złudna
Prosiłbym o pomoc i wytłumaczenie, jeśli ktoś ma na to czas :/