logo

Dinamička dodjela memorije u C-u

Koncept dinamička dodjela memorije u c jeziku omogućuje C programeru da alocira memoriju tijekom izvođenja . Dinamička dodjela memorije u c jeziku moguća je pomoću 4 funkcije datoteke zaglavlja stdlib.h.

  1. malloc()
  2. calloc()
  3. realloc()
  4. besplatno()

Prije nego što naučimo gornje funkcije, shvatimo razliku između statičke dodjele memorije i dinamičke dodjele memorije.

statička dodjela memorijedinamička dodjela memorije
memorija se dodjeljuje tijekom kompajliranja.memorija se dodjeljuje tijekom izvođenja.
memorija se ne može povećati tijekom izvođenja programa.memorija se može povećati tijekom izvođenja programa.
koristi se u nizu.koristi se u povezanom popisu.

Pogledajmo sada na brzinu metode korištene za dinamičku dodjelu memorije.

java int kao niz
malloc() dodjeljuje jedan blok tražene memorije.
calloc() dodjeljuje više blokova tražene memorije.
realloc() ponovno dodjeljuje memoriju koju zauzimaju funkcije malloc() ili calloc().
besplatno() oslobađa dinamički dodijeljenu memoriju.

funkcija malloc() u C-u

Funkcija malloc() dodjeljuje jedan blok tražene memorije.

Ne inicijalizira memoriju u vrijeme izvođenja, tako da u početku ima vrijednost smeća.

Vraća NULL ako memorija nije dovoljna.

Sintaksa funkcije malloc() data je u nastavku:

 ptr=(cast-type*)malloc(byte-size) 

Pogledajmo primjer funkcije malloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

funkcija calloc() u C-u

Funkcija calloc() dodjeljuje više blokova tražene memorije.

U početku inicijalizira sve bajtove na nulu.

Vraća NULL ako memorija nije dovoljna.

Sintaksa funkcije calloc() dana je u nastavku:

 ptr=(cast-type*)calloc(number, byte-size) 

Pogledajmo primjer funkcije calloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

funkcija realloc() u C-u

Ako memorija nije dovoljna za malloc() ili calloc(), možete ponovno dodijeliti memoriju pomoću funkcije realloc(). Ukratko, mijenja veličinu memorije.

Pogledajmo sintaksu funkcije realloc().

novi redak python
 ptr=realloc(ptr, new-size) 

funkcija free() u C-u

Memorija koju zauzimaju funkcije malloc() ili calloc() mora se osloboditi pozivom funkcije free(). U protivnom će trošiti memoriju do izlaska iz programa.

Pogledajmo sintaksu funkcije free().

 free(ptr)