PDA

View Full Version : حرفه ای: یک سوال درباره تخصیص حافظه پویا (کد)



aqm176
سه شنبه 25 اسفند 1394, 03:53 صبح
سلام و خسته نباشید. من یه تیکه کد دارم به این شکل:
float *p;
p = (float *) calloc(sizeof(int) * 100)

میدونم که این یه مدل تخصیص حافظس و کاری به این ندارم که تئوریش چیه، به این کار دارم که اون (float *) قبل تخصیص حافظه چکاری انجام میده.
لذا باید گفت که این تابع ینی همین calloc خودش از نوع void هستش و مقداری بر نمیگردونه پس تبدیل انواع نمیتونه باشه.

حالا شما کمک کنید به من.
ممنون.

3pid71
سه شنبه 25 اسفند 1394, 06:17 صبح
دوستان اگه میشه یکی کلا درکورد این نوع تخصیص حافظه و malloc یه توضیحی بده. من خیلی متوجه نمی شم چی به چیه

aqm176
سه شنبه 25 اسفند 1394, 06:51 صبح
دوستان اگه میشه یکی کلا درکورد این نوع تخصیص حافظه و malloc یه توضیحی بده. من خیلی متوجه نمی شم چی به چیه

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

zero_ox
سه شنبه 25 اسفند 1394, 11:19 صبح
سلام و خسته نباشید. من یه تیکه کد دارم به این شکل:
float *p;
p = (float *) calloc(sizeof(int) * 100)

میدونم که این یه مدل تخصیص حافظس و کاری به این ندارم که تئوریش چیه، به این کار دارم که اون (float *) قبل تخصیص حافظه چکاری انجام میده.
لذا باید گفت که این تابع ینی همین calloc خودش از نوع void هستش و مقداری بر نمیگردونه پس تبدیل انواع نمیتونه باشه.

حالا شما کمک کنید به من.
ممنون.

سلام : تابع calloc اشاره گر void رو بر می گردونه . و این عبارت (*float) هم همان cast کردن اشاره گر void به نوع دلخواه است .



http://www.cplusplus.com/reference/cstdlib/calloc/
Return ValueOn success, a pointer to the memory block allocated by the function.
The type of this pointer is always void*, which can be cast to the desired type of data pointer in order to be dereferenceable.
If the function failed to allocate the requested block of memory, a null pointer is returned.