logo

Динамичка алокација меморије у Ц

Концепт динамичка алокација меморије у језику ц омогућава Ц програматору да додели меморију у току рада . Динамичка алокација меморије у ц језику је могућа помоћу 4 функције заглавља стдлиб.х.

  1. маллоц()
  2. цаллоц()
  3. реаллоц()
  4. бесплатно()

Пре него што научимо горе наведене функције, хајде да разумемо разлику између статичке алокације меморије и динамичке алокације меморије.

статичка алокација меморијединамичка алокација меморије
меморија се додељује у време компајлирања.меморија се додељује у време извршавања.
меморија се не може повећати током извршавања програма.меморија се може повећати током извршавања програма.
користи се у низу.користи се у повезаној листи.

Хајде сада да брзо погледамо методе које се користе за динамичку алокацију меморије.

маллоц() додељује један блок тражене меморије.
цаллоц() додељује више блокова тражене меморије.
реаллоц() поново додељује меморију коју заузимају функције маллоц() или цаллоц().
бесплатно() ослобађа динамички додељену меморију.

маллоц() функција у Ц

Функција маллоц() додељује један блок тражене меморије.

алгебра скупова

Не иницијализује меморију у време извршавања, тако да у почетку има вредност смећа.

Враћа НУЛЛ ако меморија није довољна.

Синтакса функције маллоц() је дата у наставку:

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

Погледајмо пример функције маллоц().

 #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)>

цаллоц() функција у Ц

Цаллоц() функција додељује више блокова тражене меморије.

како претворити цхар у стринг јава

У почетку иницијализује све бајтове на нулу.

Враћа НУЛЛ ако меморија није довољна.

Синтакса функције цаллоц() је дата у наставку:

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

Погледајмо пример функције цаллоц().

 #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)>

реаллоц() функција у Ц

Ако меморија није довољна за маллоц() или цаллоц(), можете поново доделити меморију помоћу функције реаллоц(). Укратко, мења величину меморије.

Хајде да видимо синтаксу функције реаллоц().

 ptr=realloc(ptr, new-size) 

фрее() функција у Ц

Меморија коју заузимају функције маллоц() или цаллоц() мора се ослободити позивањем функције фрее(). У супротном, трошиће меморију до изласка из програма.

Хајде да видимо синтаксу функције фрее().

 free(ptr)