C লাইব্রেরি মেমরি অ্যালোকেশন ফাংশন void *realloc(void *ptr, size_t size) malloc বা calloc কল করে পূর্বে অ্যালোকেট করা মেমরি ব্লকটি resize করার চেষ্টা করে যেটি ptr দ্বারা নির্দেশ করা হয়েছে।
মেমরি অ্যালোকেশন ফাংশন
মেমরি দুটি পদ্ধতিতে অ্যালোকেট করা যায় যেগুলো নিচে ব্যাখ্যা করা হলো −

একবার কম্পাইল টাইমে মেমরি অ্যালোকেট হলে, এক্সিকিউশন চলাকালীন এটিকে পরিবর্তন করা যায় না। মেমরির অভাবে অথবা মেমরির অপচয় হবে।
সমাধান হলো ডাইনামিক্যালি মেমরি তৈরি করা অর্থাৎ প্রোগ্রাম এক্সিকিউশনের সময় ইউজারের প্রয়োজন অনুযায়ী।
ডাইনামিক মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলো হলো −
- malloc()
- calloc()
- realloc()
- free()
realloc() ফাংশন
এটি ইতিমধ্যে অ্যালোকেট করা মেমরি পুনরায় অ্যালোকেট করতে ব্যবহৃত হয়।
এটি অ্যালোকেট করা মেমরি বাড়াতে বা কমাতে পারে।
এটি একটি void পয়েন্টার রিটার্ন করে যা পুনরায় অ্যালোকেট করা মেমরির বেস অ্যাড্রেস নির্দেশ করে।
realloc() ফাংশনের সিনট্যাক্স নিচে দেওয়া হলো −
void *realloc(pointer, newsize);
উদাহরণ
নিচের উদাহরণটি realloc() ফাংশন ব্যবহারের 모습을 보여준다।
int *ptr; ptr = (int *) malloc(1000); // calloc ও ব্যবহার করা যায় -------- ptr = (int *) realloc(ptr, 500); -------- ptr = (int *) realloc(ptr, 1500);
উদাহরণ
realloc() ফাংশন ব্যবহার করে C প্রোগ্রাম নিচে দেওয়া হলো −
#include#include int main(){ int *ptr, i, num; printf("অ্যারে সাইজ ৫\n"); ptr = (int*)calloc(5, sizeof(int)); if(ptr == NULL){ printf("মেমরি অ্যালোকেশন ব্যর্থ"); exit(1); // প্রোগ্রাম থেকে বের হওয়া } for(i = 0; i < 5; i++){ printf("%d নম্বর লিখুন: ", i); scanf("%d", ptr+i); } printf("\nঅ্যারে সাইজ ৭ বাড়াইyor\n"); ptr = (int*)realloc(ptr, 7 * sizeof(int)); if(ptr == NULL){ printf("মেমরি অ্যালোকেশন ব্যর্থ"); exit(1); } printf("\n২টি ইন্টিজার আরো লিখুন\n\n"); for(i = 5; i < 7; i++){ printf("%d নম্বর এলিমেন্ট লিখুন: ", i); scanf("%d", ptr+i); } printf("\n ফলাফল অ্যারে:\n\n"); for(i = 0; i < 7; i++){ printf("%d ", *(ptr+i)); } return 0; }
আউটপুট
উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −
অ্যারে সাইজ ৫ ০ নম্বর লিখুন: 23 ১ নম্বর লিখুন: 12 ২ নম্বর লিখুন: 45 ৩ নম্বর লিখুন: 67 ৪ নম্বর লিখুন: 20 অ্যারে সাইজ ৭ বাড়াইyor ২টি ইন্টিজার আরো লিখুন ৫ নম্বর এলিমেন্ট লিখুন: 90 ৬ নম্বর এলিমেন্ট লিখুন: 60 ফলাফল অ্যারে: 23 12 45 67 20 90 60