Dakle, u primeru koji si naveo treba da stoji:
Code:
x = new int[1000];
i na kraju:
Code:
delete [] x;
... da bi primer bio ispravan.
Pretpostavljam da ti je cudno to sto si rezervisao memoriju za samo 1 int, a
uspesno si pristupio memoriji i dodelio vrednosti za svih 1000, i na kraju sve to
verifikovao ispisom...
To je u C/C++ legalno (obican pointerski pristup), ali naravno nije dobro, jer kod
ozbiljnijih primera lako mozes da *unistis* (overwrite ili over-run) neki drugi objekat.
To je ono protiv cega se pored ostalog bori .NET i 'managed' kod.
U praksi to znaci da tvoj kod u startu moze i da proradi, a da u nekoj kasnijoj fazi
pukne i da pojma nmas zasto se to desilo...
U medjuvremenu pogledaj ovaj primer i probaj da predbidis rezultat:
Code:
int *x,*y, i;
x = new int[1];
y = new int[1];
y[0] = 8;
for(i=0;i<1000;i++){
x[i] = 7;
}
ShowMessage( x[999] );
ShowMessage( y[0] );
delete [] x;
delete [] y;
... a posle probaj da zamaskiras petlju.
P.S. Dodatak:
Mene je slicna stvar dugo 'mucila' jer jedan od mojih NT servisa nikako nije hteo da
radi (stabilno) na NT4 Workstation, a radilo se (karikirano) o ovome:
char a[1000]
a[1000] = 'x';
... servis se non-stop po automatizmu zaustavljao kad doje do ovoga.
[Ovu poruku je menjao X Files dana 04.09.2005. u 12:21 GMT+1]
[Ovu poruku je menjao X Files dana 04.09.2005. u 12:28 GMT+1]