آموزش زبان C (قسمت دوازدهم:DynamicAllocation)

به آموزش زبان C (قسمت دوازدهم – Dynamic Allocation) خوش اومدید.

تخصیص پویای حافظه یک موضوع بسیار مهم در زبان C است. که اجازه میده ساختارهای دادگان پیچیده ای را بسازیم مانند لیستهای لینک شده (linked lists). تخصیص پویای حافظه به ما کمک می کند در زمانیکه داریم برنامه را می نویسیم دادگان را ذخیره کنیم بدون آنکه سایز دیتا را بدانیم . برای تخصیص یک قسمت از حافظه به صورت پویا، ما باید یک اشاره گر آماده داشته باشیم برای ذخیره محل حافظه تخصیص داده شده جدید. ما می توانیم به حافظه ای که برای ما تخصیص داده شده با استفاده از یک اشاره گر یکسان دسترسی داشته باشیم. و ما می توانیم از آن اشاره گر برای آزاد کردن حافظه دوباره زمانیکه استفاده از آن را تمام کردیم استفاده کنیم.

بزارید فرض کنیم ما می خواهیم یک ساختار از مشخصات یک فرد را به صورت پویا تخصیص بدیم. ساختار اون فرد به صورت زیر تعریف می شود:

typedef struct {
    char * name;
    int age;
} person;

برای تخصیص یک فرد جدید در آرگومنت myperson، ما از سینتکس زیر استفاده می کنیم:

person * myperson = (person *) malloc(sizeof(person));

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

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

برای دسترسی به اعضای یک ساختار فرد، ما می توانیم از -> استفاده کنیم:

myperson->name = "John";
myperson->age = ۲۷;

بعد از اینکه انجام دادیم با استفاده از ساختار تخصیص داده شده پویا، ما می توانیم آن را با استفاده از دستور free آزاد کنیم:

free(myperson);

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

تمرین: در کد زیر از نام malloc استفاده کنید تا تخصیص پویا بدهید به یک ساختار مختصات یک نقطه:

#include 
#include 
typedef struct {
  int x;
  int y;
} point;
int main() {
  point * mypoint = NULL;
  /* Dynamically allocate a new point
    struct which mypoint points to here */
  mypoint->x = 10;
  mypoint->y =5 ;
  printf("mypoint coordinates: %d, %d\n", mypoint->x, mypoint->y);
  free(mypoint);
  return 0;
}

جواب تمرین:

پایان آموزش زبان C (قسمت دوازدهم – Dynamic Allocation)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...