پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟
مگه تو بقیه کامپایلرها میشه همچین کاری کرد؟
اگه میشه پس اینجا هم احتمالا میشه!
تاجاییکه یادمه بوسیله پوینتر و فانکشن malloc اینکارو تو سی میشه کرد:
int sizeOfArray;
int *yrArray;
yrArray = malloc(10 * sizeOfArray
);
پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟
نوشته اصلی توسط nanoware
مگه تو بقیه کامپایلرها میشه همچین کاری کرد؟
اگه میشه پس اینجا هم احتمالا میشه!
تاجاییکه یادمه بوسیله پوینتر و فانکشن malloc اینکارو تو سی میشه کرد:
int sizeOfArray;
int *yrArray;
yrArray = malloc(10 * sizeOfArray
);
پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟
نوشته اصلی توسط alirf
سلام دوستان
نمی توان در کدویزن آرایه بدون سایز تعریف کرد ؟ چه شکلی ؟ :mrgreen:
حافظه در زبان C به ۳ صورت مدیریت میشه. Static ، Automatic و Dynamic
متغیرهایی که در بدنهٔ اصلی برنامه تعریف میآشوند Static هستند و در تمام زمانی که برنامه در حال اجرا است عمر خواهند کرد.
متغیرهای Automatic در Stack ساخته میآشوند که این متغیرها در بدنهٔ تابع تعریف میشوند و زمانی که تابعی فراخوانی میشود بوجود خواهند آمد و در هنگام برگشت از تابع عمرشان پایان میآیابد و فضای اختصاص داده شده به آنها آزاد میآشود.
سایز متغیرهای Static و Automatic باید در هنگام کامپایل معلوم باشد.
اما روش سومی هم وجود دارد که میآتوان در هنگام اجرای برنامه فضای با طول دلخواه و متغیر ساخت و از آن استفاده کرد.
همانطور که دوستمان اشاره کردند این کار توسط تابع malloc انجام میآشود.
شکل این تابع به این صورت است :
کد PHP:
void *malloc(size_t size);
که به میزان size حافظه در اختیار برنامهآنویسی قرار میآدهد و اشارهآگری به ابتدای بلوک حافظهٔ اختصاص داده شده برآمیگرداند.
این تابع در صورت شکست در اختصاص دادن حافظه ، مقدار NULL را باز خواهند گرداند.
در مثال زیر ، فضایی ۱۰ تایی با طول نوع int ایجاد میآشود. مانند یک array نوع int با طول ۱۰
کد PHP:
/* Allocate space for an array with ten elements of type int. */ int *ptr = malloc(10 * sizeof (int)); if (ptr == NULL) { /* Memory could not be allocated, the program should handle the error here as appropriate. */ } else { /* Allocation succeeded. Do something. */ free(ptr); /* We are done with the int objects, and free the associated pointer. */ ptr = NULL; /* The pointer must not be used again, unless re-assigned to using malloc again. */ }
توجه داشته باشید فضای ایجاد شده تا زمانی که ما آنرا آزاد نکنیم وجود خواهد شد و حافظه را اشغال خواهد کرد.
برای پایان دادن به عمر فضای ایجاد شده از تابع free استفاده میآشود که در مثال بالا شکل استفاده از آن نشان داده شده است.
و نکتهٔ آخر اینکه شکل توابع malloc و free در فایل هیدر stdlib.h موجود هستند.
برای مطالعهٔ بیشتر در این مورد :
http://en.wikipedia.org/wiki/Malloc
دیدگاه