File: Stare vježbe/vjezbe10/61__malloc_1Dpolja.c
/* 61__malloc_1Dpolja.c Rad s dinamicki alociranim jednodimenzionalnim poljima, Uvodjenje funkcije realloc. ----- Prototip funkcije realloc: void* realloc(void* memblock, size_t size); Pomocu funkcije realloc mozemo realocirati blok memorije -- realloc ce vratiti void* pointer na realocirani (i eventualno premjesteni) komad memorije na koga je prethodno pokazivao pointer memblock. Sadrzaj realociranog bloka memorije ostat ce nepromijenjen do manje od nove i stare velicine. */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int m, n, foo, i, j, pos, OK, *polje; printf("Koliko brojeva zelite unijeti: "); scanf("%d", &n); /* Alociramo memoriju za n elemenata polja. Buduci ce nam pojedini element polja biti tipa int, potrebno je alocirati n*sizeof(int) byteova. */ polje = (int*) malloc(n*sizeof(int)); if(polje == NULL) { printf("Greska u alokaciji memorije!\n"); exit(1); } for(i=0; i<n ; i++) { scanf("%d", &polje[i]); /* ili: scanf("%d", polje+i); */ } for(i=0; i<n; i++) printf("\n\nKoliko jos brojeva zelite unijeti: "); scanf("%d", &m); /* Pomocu funkcije realloc povecati cemo trenutnu velicinu jednodimenzionalnog polja polje za m mjesta (odnosno m*sizeof(int) byteova). */ polje = (int*) realloc(polje, (m+n)*sizeof(int)); if(polje == NULL) { printf("Greska u alokaciji memorije!\n"); exit(1); } for(i=0; i<m; i++) { scanf("%d", &foo); OK = 0; while(!OK) { OK = 1; printf("Na koje mjesto u polju (-1 za na kraj polja): "); scanf("%d", &pos); if(pos == -1) *(polje+n+i) = foo; /* ili: polje[n+i] = foo */ else if(pos<0 || pos > n+i) { printf("Greska: Neispravna pozicija!\n"); OK = 0; } else { /* Pomicemo sve elemente polja od pozicije pos pa nanize */ for(j=n+i ; j>pos ; j--) polje[j] = polje[j-1]; polje[pos] = foo; } } for (j=0; j<n+i+1; j++) } free(polje); return 0; }
|