Najverovatnija greska koju si imao kada si koristio dinamicke nizove je to sto si ili zaboravljao da alociras dovoljnu kolicinu memorije da podatke smestis u nju, ili si citao podatak sa indexom npr. 2345, a alocirao si memoriju i popunio niz sa 1000 elemenata.
Ne kazem da uvek treba koristiti dinamicko kreiranje objekata... zbog cega bi neko pisao:
Code:
var
Niz: array of Integer;
begin
SetLength(Niz, 10);
.
.
.
Niz := nil;
end;
kad moze
Code:
var
Niz: array [0..9] of Integer;
begin
.
.
.
end;
ili zasto
Code:
var
Broj: ^Integer;
begin
New(Broj);
Broj^ := 5;
.
.
.
Dispose(Broj);
end;
umesto
Code:
var
Broj: Integer;
begin
Broj := 5;
.
.
.
end;
ali kada treba recimo da kreiras od 5 - 50 edit kontrola da bi korisnik uneo atribute vezane za neki artikal ili sta vec, umesto da vizuelno kreiras 50 kontrola i da ih sakrijes, pa onda kroz kod da pojavis onoliko koliko ti treba, ti jednostavno u kodu dinamicki kreiras onoliko koliko ti treba i kada ti vise ne trebaju obrises ih.
Drugi primer... da uzmemo niz... treba ti program koji treba da ucita fajl CEO fajl u memoriju ako je moguce... ti mozes da napravis niz od mnooogo elemenata (recimo 10000000) i ako korisnik pokusa da ucita veci fajl jednostavno kazes da ne moze, a mozes da kada korisnik izabere fajl probas da zauzmes blok memorije velicine fajla i tako ces moci da podrzis i mnogo vece fajlove (naravno ako imas dosta memorije), ali za fajm velicine 1 bajt neces bezveze zauzeto jos 9999999 kao sto bi bio slucaj da nisi koristio dinamicki niz.
Zakljucak... ne treba bespotrebno preterivati sa upotrebom pointera i dinamickog kreiranja, ali ne treba bezati od pointera.