تک بست - دنیای فناوری
Techbest Desktop

نحوه ی استفاده از توابع malloc و calloc در زبان سی


 

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


توابع ذکر شده ، 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) ;




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


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


نظرات ( ۱ )

zahra

من راضی بودم چون دقیقا تو همین بیس مشکل داشتم فقط کلمه های مثال قر و قاطی شده

ADMIN

ممنون.

در حال تکمیل قالب جدید هستم.

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی