در این مقاله قصد داریم تا با نحوه ی عملکرد توابع تخصیص حافظه ی پویا در زبان برنامه نویسی سی آشنا شویم.

توابع ذکر شده ، malloc و calloc هستند که از نظر کارایی در بحث های ما تفاوت چندانی ندارند.

تعریف این دو تابع در کتابخانه های malloc.h یا stdlib.h موجود هستند.

خروجی این دو تابع اشاره گری به آدرس اولین خانه ی حافظه اختصاص یافته است.البته در برخی مواقع امکان دارد که سیستم عامل بنا به دلایلی نتواند حافظه ی موردنیاز ما را تخصیص دهد و در اینصورت مقدار NULL یا تهی را به اشاره گر برمیگرداند.پس حتما قبل از اقدام به استفاده از حافظه ی مورد نیاز بررسی کنید که مقدار اشاره گر تهی نباشد.

در نهایت و پس از استفاده از حافظه ی موردنیاز خود و انجام عملیاتی روی داده ها ، با استفاده از تابع free حافظه ی تخصیص یافته را آزاد کنید تا سیستم عامل بتواند برای انجام پردازش های دیگر از آن استفاده کند.

نحوه ی استفاده از این توابع همانطور که در شکل بالا هم تا حدودی مشخص است به صورت زیر است : 


 ; اشاره گر* int

 ; (سایز مورد نیاز برحسب بایت)  malloc  (* نوع اشاره گر) = اشاره گر

...

   ; (اشاره گر) free




اما بهتر میدانیم به جای این روش ، از مثال عملی برای تفهیم مطلب استفاده کنیم : 



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

#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,*ptr;
    printf("Enter number of elements: ");
    scanf("%d",&n);
    ptr = (int*) malloc (n*sizeof(int));  //memory allocated using malloc
    if (ptr==NULL)                     
    {
        printf("Error! memory not allocated.");
        exit(0);
    }
           ..........    //doing somethings with data

   free (ptr) ; 




//calloc()  =====>            ptr=(cast-type*)calloc(n,element-size);
#include <stdio.h>
#include <stdlib.h>
int main(){
    int num,*ptr;
    printf("Enter number of elements: ");
    scanf("%d",&num);
    ptr = (int *) calloc (num,sizeof(int));
    if (ptr==NULL)
    {
        printf("Error! memory not allocated.");
        exit(0);
    }

          ...........   //doing somethings with data

         free (ptr) ;




همانطور که احتمالا متوجه شدید تفاوت این دو تابع از نظر سینتکس ، تعداد آرگومان های ورودی آنهاست.

تذکر : پس از استفاده از حافظه ی مورد نیاز خود حتما آن را آزاد کنید وگرنه الگوریتمتان در واقع تفاوتی با استفاده از حافظه ی پویا نخواهد کرد.