آموزش تخصیص حافظه پویا در c++

آموزش کار با تخصیص حافظه پویا ( تابع malloc , delete , free , new ) در c++ :

برنامه نویسی c++

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

و هنگام نوشتن برنامه به وسیله ی تعریف متغیرها حافظه ی مورد نیاز را به برنامه اختصاص می دادیم.

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

حین اجرای برنامه تعیین می گردد. در این حالت برنامه می تواند با استفاده از مکانیزم تخصیص

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

را در آن ذخیره نماید.

آموزش کار با تابع malloc در c++ :

ساختار تابع malloc در c++ به صورت زیر است :

malloc (تعداد بایت مورد نیاز)

آموزش کار با حافظه پویا تابع دستور delete free malloc new در c++

تابع malloc در c++ در حافظه ی اصلی به دنبال تعداد بایت مشخص شده می گردد.

اگر این تعداد بایت به صورت آزاد و پشت سر هم موجود باشد آن را به برنامه اختصاص می دهد

و آن را در یک اشاره گر ذخیره می نماید.از طریق این آدرس می توان به ناحیه ی تخصیص یافته

دست یافت. اگر این تابع نتواند حافظه ی مورد نیاز را به برنامه اختصاص دهد مقدار Null بازمی گرداند.

اشاره گری که در آن مقدار Null قرار گیرد به هیچ جا اشاره نمی کند.

آموزش کار با تابع free در c++ :

از دستور تابع free در c++ برای آزاد سازی ناحیه تخصیص یافته استفاده میکنیم.

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

free (آدرس شروع ناحیه ی تخصیص یافته)

مثال :

برنامه ای با اشاره گرها در c++ بنویسید که تعداد نا مشخصی عدد را دریافت و سپس میانگین آن ها را محاسبه و چاپ نماید.

برنامه در ابتدا تعداد اعداد را از کاربر دریافت می نماید.


# include< alloc.h >
void main()
{
   int *p , *h ,n ,i;
   long int sum=0;
   float ave;
   cin>>n;
   p=( int * )malloc (2*n);
   if ( !p )
     {
        puts( " حافظه ی کافی وجود ندارد " );
        exit(1);
     }
   for( i=0 , h=p ; i<n ; i++ , h++)
     {
        scanf( "%d" ,h);
        sum += *h ;
     }
   ave= (float)sum /n;
   cout<< ave;
   free(p);
}

آموزش کار با دستور New در c++ :

از دستور new در c++ برای تخصیص حافظه استفاده میکنیم. در c++ می توانیم از دستور New برای تخصیص حافظه به صورت پویا استفاده کنیم.


نوع اشاره گر = New نوع حافظه ;
p = new int ;

آموزش کار با دستور Delete در c++ :

دستور delete  در c++ برای آزاد کردن حافظه ی اختصاص داده شده به برنامه استفاده می گردد.


delete نام اشاره گر ;
delete p ;

حافظه ای که تابع malloc تخصیص یافته است فقط با free آزاد می گردد

و همچنین حافظه ای که با new به برنامه اختصاص داده شده را با delete آزاد نماییم.