osnove programiranja pointeri i 1d polja - …tniksic/fi/materijali/lec8.pdf · osnove...

34
Osnove programiranja Dinamiˇ cko alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i 2D polja Funkcije malloc i calloc Funkcija realloc Funkcija free Pointeri i 1D polja pointeri i polja su usko vezani neka su pointer px i polje x istog tipa sljede´ ce dvije naredbe su ekvivalentne px=&x[0]; px=x; obje naredbe pointeru px pridružuju adresu prvog elementa polja x elementu polja x[i] možemo pristupiti i pomo´ cu pointera *(px+i)

Upload: dinhdan

Post on 05-Sep-2018

261 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Pointeri i 1D polja

• pointeri i polja su usko vezani• neka su pointer px i polje x istog tipa• sljedece dvije naredbe su ekvivalentne

px=&x[0];px=x;

• obje naredbe pointeru px pridružuju adresuprvog elementa polja x

• elementu polja x[i] možemo pristupiti i pomocupointera *(px+i)

Page 2: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

Page 3: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

• inicijaliziramo cjelobrojno polje od tri elementa

Page 4: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

• deklariramo cjelobrojnu varijablu koja ce služitikao brojac

Page 5: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

• deklariramo pointer na cjelobrojnu varijablu px ipridružimo mu adresu prvog elementa polja x(x[0])

• ekvivalentna naredba bi bila px=&x[0];

Page 6: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

• ulazimo u for petlju, brojac i=0

Page 7: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3

• ispisujemo element polja x[0]

Page 8: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3

• ispisujemo sadržaj varijable na koju pokazujepointer px

Page 9: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3

• brojac i=1

Page 10: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3x[1]=5

• ispisujemo element polja x[1]

Page 11: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3x[1]=5*(px+1)=5

• ispisujemo sadržaj varijable na koju pokazujepointer px+1

Page 12: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3x[1]=5*(px+1)=5

• brojac i=2

Page 13: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3x[1]=5*(px+1)=5x[2]=1

• ispisujemo element polja x[2]

Page 14: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci dio koda ilustrira vezu polja i pointera

int x[]={3,5,1};

int i;int *px=x;for(i=0;i<3;i++){

printf("x[%d]=%d\n",i,x[i]);printf("*(px+%d)=%d\n",i,*(px+i));

}

x[0]=3*px=3x[1]=5*(px+1)=5x[2]=1*(px+2)=1

• ispisujemo sadržaj varijable na koju pokazujepointer px+2

• elementima polja možemo bez problemapristupati koristeci pointere

Page 15: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Važno!• polje i pointer nisu potpuno ekvivalentni• neka je x polje, a px pointer istog tipa• varijabla x je konstanta jer ne možemo mijenjati

lokaciju polja u memoriji racunala, nego samovrijednosti elemenata polja

• zato naredbe tipa x++ ne funkcioniraju• ekvivalentne naredbe s pointerima (npr. px++)

su potpuno legalne

Page 16: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

-

x[0]

10

-

x[1]

14

-

x[2]

18

-

px[0]

56

-

px[1]

60

-

px[2]

64

Page 17: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

12

x[0]

10

24

x[1]

14

35

x[2]

18

-

px[0]

56

-

px[1]

60

-

px[2]

64

Page 18: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

12

x[0]

10

24

x[1]

14

35

x[2]

18

-

px[0]

56

-

px[1]

60

-

px[2]

64

Page 19: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

12

x[0]

10

24

x[1]

14

35

x[2]

18

10

px[0]

56

-

px[1]

60

-

px[2]

64

Page 20: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

12

x[0]

10

24

x[1]

14

35

x[2]

18

10

px[0]

56

14

px[1]

60

-

px[2]

64

Page 21: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Polje pointera

• osim varijable pokazivackog tipa možemodeklarirati i polje varijabli pokazivackog tipa tj.polje pointera

int x[]={12,24,35};int *px[3];px[0]=&x[0];px[1]=&x[1];px[2]=&x[2];

12

x[0]

10

24

x[1]

14

35

x[2]

18

10

px[0]

56

14

px[1]

60

18

px[2]

64

Page 22: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Pointeri i 2D polja

• organizacija "fixed sized" 2D polja A[m][n] umemoriji racunala

13

A[0][0]

33

A[0][1]

76

A[0][2]

45

A[0][3]

11

A[0][4]

99

A[1][0]

92

A[1][1]

14

A[1][2]

17

A[1][3]

18

A[1][4]

43

A[2][0]

87

A[2][1]

44

A[2][2]

32

A[2][3]

76

A[2][4]

A

• element polja A[i][j] nalazi se na adresi

&A[0][0]+(n*i+j)*sizeof(tip_polja)

Page 23: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• 2D polje možemo organizirati i kao pointer naniz pointera

13

A[0][0]

20

33

A[0][1]

76

A[0][2]

45

A[0][3]

11

A[0][4]

99

A[1][0]

40

92

A[1][1]

14

A[1][2]

17

A[1][3]

18

A[1][4]

43

A[2][0]

60

87

A[2][1]

44

A[2][2]

32

A[2][3]

76

A[2][4]

20

*A[0]

45

40

*A[1]

60

*A[2]

45

**A

77

• element polja A[i][j]• adresi na koju pokazuje A dodaj i → A[i]• adresi na koju pokazuje A[i] dodaj j → A[i][j]

Page 24: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Funkcije malloc i calloc

• dinamicko alociranje memorije → varijable i poljaalociramo za vrijeme izvršavanja programa, a nekao dosada za vrijeme prevodenja programa

• koristimo funkcije malloc i calloc deklarirane u• funkcija malloc kao argument uzima broj

byte-ova koje treba rezervirati za polje, a vracapointer na rezervirani blok memorije ili NULLpointer ako zahtjev za alociranjem nije mogaobiti ispunjen (jer npr. nema dovoljno memorije)

• pointer koji funkcija malloc vraca je genericki(tipa void) pa ga prije upotrebe treba konvertiratiu željeni tip cast operatorom

Page 25: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

Page 26: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• deklariramo pointer px tipa double

Page 27: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• definiramo broj varijabli za koje trebamorezervirati memoriju

Page 28: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• pozivamo funkciju malloc

Page 29: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• argument fukcije malloc je broj byte-ova kojiželimo rezervirati

• broj varijabli pomnožimo s brojem byte-ova kojezauzima varijabla doticnog tipa

Page 30: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• genericki pointer koji vraca funkcija malloc castoperatorom (double*) pretvaramo u pointer tipadouble

Page 31: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• sljedeci fragment koda pokazuje kako funkcijommalloc možemo rezrvirati memoriju za 128varijabli tipa double

• ne smijemo zaboraviti ukljuciti biblioteku<stdlib.h>

double *px;int broj=128;px=(double*) malloc(broj*sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

• provjerimo da li je memorija rezervirana• ako je došlo do greške malloc vraca NULL

pointer, program obavještava korisnika o grešci iprekida izvršavanje

Page 32: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

• funkcija calloc funkcionira slicno kao funkcijacalloc

• razlike izmedu funkcija malloc i calloc• funkcija calloc uzima dva argumenta: broj

varijabli za koje želimo rezervirati memoriju ivelicinu tipa varijable

• vrijednost varijabli rezerviranih funkcijom callocse postavlja na nulu, dok je vrijednost varijablirezerviranih funkcijom malloc proizvoljna

double *px;int broj=128;px=(double*)calloc(broj,sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}

Page 33: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Funkcija realloc

• funkciju realloc koristimo da bi rezerviralidodatnu memoriju

• argumenti funkcije realloc su pointer na dosadrezerviranu memoriju i broj dodatnih byte-ovakoje želimo rezervirati

• u sljedecemo primjeru rezerviramo mjesto zadodatnih 256 varijabli tipa double

• u praksi bi još morali provjeriti da li je memorijadoista rezervirana

double *px;int broj=128;px=(double*)calloc(broj,sizeof(double));int dodatno=256;px=realloc(px,dodatno*sizeof(double));

Page 34: Osnove programiranja Pointeri i 1D polja - …tniksic/FI/materijali/lec8.pdf · Osnove programiranja Dinamickoˇ alociranje memorije Pointeri i 1D polja Polje pointera Pointeri i

Osnoveprogramiranja

DinamickoalociranjememorijePointeri i 1D polja

Polje pointera

Pointeri i 2D polja

Funkcije malloc i calloc

Funkcija realloc

Funkcija free

Funkcija free

• kada nam rezervirana memorija više ne trebamoramo je osloboditi

• koristimo funkciju free deklariranu u• argument funkcije free je pointer na blok

memorije koji želimo osloboditidouble *px;int broj=128;px=(double*)calloc(broj,sizeof(double));if(px==NULL){

printf("Memorija nije rezervirana\n");exit(-1);

}free(px);