| 
 File: Stare vježbe/vjezbe10/63b__malloc_2Dpolja.c 
/*     63b__malloc_2Dpolja.c     Rad s dinamicki alociranim dvodimenzionalnim poljima -- 2. metoda     -----     Ovaj pristup za rad s dinamicki alociranim dvodimenionalnim poljima     koristi se u slucaju kada prilikom compiliranja nije poznata     velicina retka (odnosno maksimalni broj stupaca).     U tu svrhu alocirat ce se prvo polje pointera na zeljeni tip, te      potom alocirati memorija za svaki od tih pointera posebno. Ideja je da     svaki pointer iz alociranog polja pointera pokazuje na pojedini redak     polja. */   #include <stdio.h> #include <stdlib.h> #include <malloc.h>   void check(void* p) {     if(p == NULL) {         printf("Greska u alokaciji memorije!\n");          exit(1);     }    }   void unos(float** A, int m, int n) {     int i, j;     for(i=0; i<m; i++)         for(j=0; j<n; j++) {             scanf("%f", &A[i][j]);         } }   void ispis(float** A, int m, int n) {     int i, j;     for(i=0; i<m; i++) {         for(j=0; j<n; j++)         } }   int main() {     int m, n, i;     /* Deklariramo dvodimenzionalno polje kao pokazivac na pokazivac na        float. */     float** A;       printf("Unesite broj redaka matrice A: ");      scanf("%d", &m);                 printf("Unesite broj stupaca matrice A: ");      scanf("%d", &n);       /* Prvo alociramo memoriju za buduce pointera na retke */     A = (float**) malloc(m*sizeof(float*));     check(A);     /* Potom alociramo memoriju za svaki redak posebno */     for (i=0; i<m; i++) {         A[i]= (float*) malloc(n*sizeof(float));         check(A[i]);     }       for(i=0; i<m; i++)         printf("Adresa %d. retka: %d\n", i, A [i ]);        unos(A, m, n);     ispis(A, m, n);       /* Oslobadjanje alocirane memorije:        prvo oslobadjamo memoriju alociranu za svaki redak posebno, te na kraju        memoriju alociranu za polje pointera */     for (i=0; i<m; i++)         free(A[i]);     free(A);       return 0; }   
 
          
  
       |