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; }
|