File: Stare vježbe/vjezbe10/60__malloc.c

  1. /*
  2.   60__malloc.c
  3.   Dinamicka alokacija memorije - funkcije malloc i free.
  4.   -----
  5.   Prototip funkcije malloc:
  6.   void* malloc(size_t size);
  7.   Funkcija malloc vraca void* pointer na alocirani komad memorije
  8.   velicine size, odnosno NULL ukoliko zahtjev za alokacijom memorije
  9.   iz nekog razloga nije mogao biti ispunjen (npr. ostalo je premalo
  10.   slobodne memorije).
  11.   Prototip funkcije free:
  12.   void free(void* memblock);
  13.   Funkcija free dealocira komad memorije na kojeg pokazuje pointer
  14.   memblock i koji je prethodno bio alociran odgovarajucim pozivom
  15.   funkcije malloc.
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <malloc.h>
  21.  
  22. int main() {
  23. int* p_int;
  24. float* p_float;
  25.  
  26. printf("p_int = %d, p_float = %d\n", p_int, p_float);
  27. /* Buduci da pointeri p_int i p_float u ovom trenutku jos nisu
  28.   inicijalizirani ne smijemo ih dereferencirati */
  29.  
  30. /* Alociramo sizeof(int) byteova memorije za pointer p_int */
  31. p_int = (int*) malloc(sizeof(int));
  32. /* Alociramo sizeof(float) byteova memorije za pointer p_float */
  33. p_float = (float*) malloc(sizeof(float));
  34.  
  35. if(p_int==NULL || p_float==NULL) {
  36. printf("Greska u alokaciji memorije!\n");
  37. exit(1);
  38. }
  39.  
  40. /* sada su pointeri p_int i p_float inicijalizirani, pa ih smijemo
  41.   dereferencirati */
  42. *p_int=3;
  43. *p_float=3.14;
  44. /* ili npr:
  45.   scanf("%d %f", p_int, p_float); */
  46.  
  47. printf("p_int = %d, p_float = %d\n", p_int, p_float);
  48. printf("*p_int = %d, *p_float = %f\n", *p_int, *p_float);
  49.  
  50. /* Na kraju obavezno moramo osloboditi alociranu memoriju pomocu
  51.   funkcije free */
  52. free(p_int);
  53. free(p_float);
  54.  
  55. return 0;
  56. }
  57.