logo

Динамічний розподіл пам'яті в C

Поняття про динамічний розподіл пам'яті мовою c дозволяє програмісту C виділяти пам'ять під час виконання . Динамічний розподіл пам'яті на мові c можливий за допомогою 4 функцій файлу заголовка stdlib.h.

  1. malloc()
  2. calloc()
  3. realloc()
  4. безкоштовно()

Перш ніж вивчати вищенаведені функції, давайте зрозуміємо різницю між статичним розподілом пам’яті та динамічним розподілом пам’яті.

наскільки великий екран мого монітора
розподіл статичної пам'ятідинамічний розподіл пам'яті
пам'ять виділяється під час компіляції.пам'ять виділяється під час виконання.
пам'ять не можна збільшити під час виконання програми.пам'ять можна збільшити під час виконання програми.
використовується в масиві.використовується у зв’язаному списку.

Тепер давайте швидко розглянемо методи, які використовуються для динамічного розподілу пам'яті.

malloc() виділяє один блок запитаної пам'яті.
calloc() виділяє кілька блоків запитаної пам'яті.
realloc() перерозподіляє пам'ять, зайняту функціями malloc() або calloc().
безкоштовно() звільняє динамічно виділену пам'ять.

функція malloc() у C

Функція malloc() виділяє один блок необхідної пам’яті.

Він не ініціалізує пам’ять під час виконання, тому спочатку має сміттєве значення.

скрипт onload javascript

Він повертає NULL, якщо пам’яті недостатньо.

Синтаксис функції malloc() наведено нижче:

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

Давайте розглянемо приклад функції 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)>

функція calloc() у C

Функція calloc() виділяє декілька блоків запитаної пам’яті.

Він спочатку ініціалізує всі байти до нуля.

Він повертає NULL, якщо пам’яті недостатньо.

Синтаксис функції calloc() наведено нижче:

jquery батьківський
 ptr=(cast-type*)calloc(number, byte-size) 

Давайте розглянемо приклад функції 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)>

функція realloc() у C

Якщо пам’яті недостатньо для malloc() або calloc(), ви можете перерозподілити пам’ять за допомогою функції realloc(). Коротше кажучи, він змінює розмір пам'яті.

Давайте розглянемо синтаксис функції realloc().

довжина рядка java
 ptr=realloc(ptr, new-size) 

функція free() у C

Пам’ять, зайняту функціями malloc() або calloc(), має бути звільнена шляхом виклику функції free(). Інакше він споживатиме пам’ять до виходу з програми.

Давайте розглянемо синтаксис функції free().

 free(ptr)