Cześć.
Kompilator sygnalizuje błąd w dostępie do pamięci (access violation). Oznacza to, że robię coś źle, a nie bardzo potrafię odnaleźć przyczynę (brak wiedzy).
Jak widać w kodzie poniższym, przy każdym wywołaniu metody dodaj tworzę nową tablice dwuwymiarową o 1 większą niż rozmiar obecnej (na podstawie puli ilosc), po czym kopiuje adresy (wskaźniki) do wcześniej utworzonych tablic dynamicznych. Na koniec usuwam starą tablice i przypisuje jej adres nowej. Przy 3 wywołaniu występuje ów error :S. Proszę szanownych kolegów o wyjaśnienie :)
Klasa:
class RCharLista {
public:
int ilosc;
char ** obiekt;
RCharLista () {
obiekt = NULL;
ilosc = 0;
}
~RCharLista () {
for (int a = 0; a < ilosc; a++)
delete [] obiekt[a];
delete obiekt;
}
void dodaj (char * rzecz, int rozmiar)
{
int a, nowaIlosc = ilosc + 1;
char ** nowy = new char *[nowaIlosc];
for (a = 0; a < ilosc; a++) {
nowy[a] = this->obiekt[a];
cout << "skopiowano wkaznik nr [" << a << "]: " << nowy[a] << endl;
}
if (!ilosc)
nowaIlosc = ilosc;
nowy[nowaIlosc] = new char [rozmiar];
for (a = 0; a < rozmiar; a++)
nowy[nowaIlosc][a] = rzecz[a];
cout << "nowy zapis: " << nowy[nowaIlosc] << endl;
delete this->obiekt;
this->obiekt = nowy;
ilosc++;
}
}
Wycinek z main:
RCharLista lol;
char buf1 [] = "umiesz tak?";
char buf2 [] = "Nie, nie umiem?";
char buf3 [] = "A to juz by bylo zupelnie niemozliwe?";
lol.dodaj(buf1, sizeof(buf1));
lol.dodaj(buf2, sizeof(buf2));
lol.dodaj(buf3, sizeof(buf3));