[ dux_cro @ 02.03.2007. 08:14 ] @
Pozdrav,
zanima me mogu li nekako napraviti da se dvodimenzionalno polje uveća ?
znam za polje:
Code:

int *polje=NULL;
int br=0;

while(nekakvi uvjeti){
br++;
polje=(int*)realloc(polje, br*sizeof(int));
}


a kako napraviti ako imam polje[][] ??
hvala
[ NrmMyth @ 02.03.2007. 08:37 ] @
Dvodimenzionlno polje je u biti jednodimnezionalno polje.
Ne znam sto radi realloc, pa ti ne mogu dat uputu.
[ dux_cro @ 02.03.2007. 08:42 ] @
znam da je to jednodimenzionalno polje, al po njemu se možeš kretati sa x,y dok bi za jednodimenzionalno (dakle polje[]) morao kretati sa x+MAXRED ako želim doći jedan red gore, a to mi je sad komplikacija.
Realloc je nastavak na malloc, on polje uvećava.
[ karas @ 02.03.2007. 10:38 ] @
Ako podjemo od toga da je
Code:

polje[i][j] = *(*(polje + i) + j);

onda dvodimenziono polje pravish sa
Code:

int** polje = NULL;
int X = 10, Y = 5;// dimenzije polja
for (x = 0; x < X; x++)
  *(polje + x) = (int*)malloc(Y * sizeof(int));

a menjash velichinu po Y sa
Code:

int newY = 15;// nova velichina za Y
for (x = 0; x < X; x++)
{
  int* res = (int*)realloc(*(polje + x), newY * sizeof(int));
  if (res == NULL)
    exit(EXIT_FAILURE);// nema vishe memorije
  *(polje + x) = res;
}

Petlje se kreccu po dimenziji X. Svako
Code:
*(polje + x)
dereferencira dimenziju X tj. omoguccava da dodavanjem broja na tu vrednost se "pomerash" po dimenziji Y. Josh jedno dereferenciranje
Code:
*(*(polje + x) + y)
daje vrednost sadrzzanu u polju, tj. kao da si nizu uradio
Code:
polje[x][y]

Nisam probao kod ali nadam se da je jasno shta sam hteo da kazzem.
[ dux_cro @ 02.03.2007. 10:56 ] @
Hvala sad ću probati, ja sam našao malo drukčije rješenje, mislim da je jednostavnije, al svodi se isto.

Code:

int velicina1;
int velicina2;
int** polje;

polje = (int**)malloc(velicina1 * sizeof(int*)); 
for (int i = 0; i < velicina1; i++){
   polje[i] = (int*)malloc(velicina2 * sizeof(int));
}

 


i poljima se može pristupati sa polje[x][y]

[Ovu poruku je menjao dux_cro dana 03.03.2007. u 09:02 GMT+1]
[ karas @ 02.03.2007. 11:10 ] @
Nisam stavio, naravno da treba rezervisati prostor po dimenziji X pre petlje za rezervisanje po Y.
[ tosa @ 04.03.2007. 04:58 ] @
Rešenje koje je karas okačio je neispravno, pisaće po memoriji gde ne bi trebalo.
Ovo drugo od duksa ispravlja taj problem a razlika je u tome što polje pokazuje
na ispravan (ručno rezervisan) deo memorije.
[ karas @ 04.03.2007. 22:27 ] @
Da, zaboravio sam da stavim malloc() za samo polje shto sam napomenuo posle, ostala inicijalizacija je ista. Pisano iz glave i na brzinu. Nadam se da je shvatio kretanje po X i Y dimenziji matrice koju predstavlja pointer na pointer, shto mi je bio cilj.
[ dux_cro @ 05.03.2007. 15:40 ] @
Shvatio sam i puno mi je pomoglo...
Zahvaljujem