Napisalem sobie taki programik (c++builder):
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
TForm1 *Form1;
int *t = NULL;
int ile=100000001;
//--------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
delete[] t;
t = new int[ile];
if(t == NULL) q->Caption="blad";
else q->Caption=IntToStr(t[100000000]);
}
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
Teoretycznie gdyby tablica się zarezerwowala :-) , to w polu textowym q
powinienem otrzymać jakąś
bliżej niezidentyfikowaną liczbę, a gdyby sie nie udalo to wyswietlilby sie
napis blad.
I rzeczywiście dla tablicy ile=1 000 001, wartość t[1 000 000] jest jakąś
tam liczbą - istnieje.
Ale dla t ile=1 000 000 01 nie ma już miejsca, a w polu q nie wyswietla sie
"blad",
lecz wywala sie błąd w okienku :-) : "Project1.exe raised exception class
bad_alloc" a debugger zaznacza linijkę
t = new int[ile];.
Jak sie przed tym zabezpieczyć? Probowalem to zrobic na wyjątkach, ale też
nic z tego.
Dobrze by bylo znalezc sposob na podanie konkretnej komorki tablicy, przy
ktorej konczy sie pamięć - ale jak, skoro tu sie taki syf robi???
Może by ktos podał jakiś przykladowy dzialający kod............
W innej sytuacji dzieje się znowu tak że tablica nie tworzy się do końca, a
wskaźnik nie jest null (i debugger sie już nie czepia linijki gdzie tablica
sie rezerwuje) ale za to bląd pojawia się przy probie odwolania do
konkretnego elemenyu tablicy.......
Pozdro