[ lazuz @ 17.11.2007. 02:33 ] @
Code:

int MAT[max_x][max_y];


koliko veliki mogu da budu brojevi max_x i max_y?

Kada stavim ovako program zakuca:

Code:

int MAT[1024][1024];


probao sam da vrednosti smanjujem za duplo i proradilo je tek na :

Code:

int MAT[128][128];


koji je maksimum velicine matrice?
[ glorius @ 17.11.2007. 17:24 ] @
Tu velicinu memorije moras da alociras....

int * MAT = new int[1024*1024]

Pa, preko aritmetike pointera da pristupas elementima...

Mislim da se, promenljiva, kada se definise kao int MAT[1024][1024], stavlja na stek, koji je ogranicen tako da dolazi do prekoracenja te memorije...

Na gornji nacin ces y redu i x koloni pristupati ovako:

Code:

int Vrednost(int x, int y)
{
        return MAT[y*1024 + x];  // ako ti MAT nije globalna promenljiva onda ces je predati funkciji
}





[ perun_ @ 18.11.2007. 00:02 ] @
Meni radi sa niz[1024][1024]. Koliko ti, prijatelju, imas RAM-a?

@glorius Ako vec radi sa pokazivacima, onda nekako logicnije da odradi sa
Code:
int** niz

Zar ne? A moze mu pristupati i preko indeksiranja operatorom [], kao i preko dereferenciranja i operatora +...
[ lazuz @ 18.11.2007. 13:01 ] @
Hvala momci na odgovorima, pokusacu oba nacina.

p.s. imam 512 MB rama
[ perun_ @ 18.11.2007. 13:40 ] @
Onda je nemoguce da ne moze. Hajde ostavi kod koji "zapinje". Mogao bi reci i koju gresku ti javlja. Ako nije
Code:
segmentation fault
onda je greska verovatno druge prirode..
[ osmania @ 18.11.2007. 14:20 ] @
ne znam mozda liku ne treba pointeri da se sve to radi, mozda moa raditi tako reci preko for petlje,
jer ja imam na faxu programiranje i ljudi jendostavno ne daju da se koristi tako nesto napredno dok se ne dodje do tog gradiva....
cisto informativno za ove hakere koji ubijaju code...
[ lazuz @ 18.11.2007. 16:22 ] @
Proradilo je kad sam primenio ono sto je glorius napisao.

Citat:
perun_: Onda je nemoguce da ne moze. Hajde ostavi kod koji "zapinje". Mogao bi reci i koju gresku ti javlja. Ako nije
Code:
segmentation fault
onda je greska verovatno druge prirode..


ne izbacuje linker ili kompajler gresku, vec u toku rada programa - kad dodje do toga da se pozove funkcija u kojoj sam napisao sporni red.

U svakom slucaju problem je resen

Hvala glorius i perun_ na pomoci


p.s. imam jos jedno pitanje, jel treba da obrisem niz iz memorije na kraju te funkcije u kojoj sam koristio ovu promenjivu?

Kako se to radi:

Code:

delete [] MAT;



ili


Code:

delete MAT;


posto i jedno i drugo hoce da kompajlira.
[ perun_ @ 18.11.2007. 16:49 ] @
Code:

delete [] MAT;


delete MAT bi koristio kada bi pokazivac MAT pokazivao na samo jedan objekat (recimo int). U ovom slucaju ti imas vise (1024) pokazivaca, i svaki od njih pokazuje na niz od 1024 elementa. Ukoliko bi uradio samo delete MAT, iz memorije dealocirao bi samo prvi pokazivac, koji pokazuje na prvih 1024 elementa, odnosno samo prvu vrstu iz tvoje matrice.. Nadam se da sam iole razumljivo ovo objasnio?
P.S. Nema na cemu!
[ lazuz @ 18.11.2007. 17:37 ] @
Bio si vrlo jasan. thx