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

একবার কম্পাইল টাইমে মেমরি অ্যালোকেট হলে, এক্সিকিউশন চলাকালীন এটিকে পরিবর্তন করা যায় না। মেমরির অভাবে অথবা মেমরির অপচয় হবে।
সমাধান হলো ডাইনামিক্যালি মেমরি তৈরি করা অর্থাৎ প্রোগ্রাম এক্সিকিউশনের সময় ইউজারের প্রয়োজন অনুযায়ী।
ডাইনামিক মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলো হলো −
- malloc()
- calloc()
- realloc()
- free()
calloc() ফাংশন
এই ফাংশনটি রানটাইমে kontinous মেমরি ব্লক অ্যালোকেট করতে ব্যবহৃত হয়।
এটি বিশেষভাবে অ্যারের জন্য ডিজাইন করা হয়েছে।
এটি একটি void পয়েন্টার রিটার্ন করে, যা অ্যালোকেট করা মেমরির বেস অ্যাড্রেস নির্দেশ করে।
calloc() ফাংশনের সিনট্যাক্স নিচে দেওয়া হলো −
void *calloc(এলিমেন্ট সংখ্যা, বাইটে সাইজ)
উদাহরণ
নিচের উদাহরণটি calloc() ফাংশন ব্যবহারের 모습을 보여준다।
int *ptr; ptr = (int *) calloc(500, 2);
এখানে, ৫০০ ব্লক মেমরি প্রতিটি ২ বাইট আকারের 연속ভাবে অ্যালোকেট হবে। মোট অ্যালোকেট করা মেমরি = ১০০০ বাইট।

int *ptr; ptr = (int *) calloc(n, sizeof(int));
উদাহরণ প্রোগ্রাম
নিচে ডাইনামিক মেমরি অ্যালোকেশন ফাংশন Calloc ব্যবহার করে কিছু এলিমেন্টের সম ও বিজোড় সংখ্যার যোগফল বের করার C প্রোগ্রাম দেওয়া হলো।
#include#include void main(){ // ভেরিয়েবল, পয়েন্টার ঘোষণা // int i, n; int *p; int even = 0, odd = 0; // Calloc ব্যবহার করে বেস অ্যাড্রেস p ঘোষণা // p = (int *) calloc(n, sizeof(int)); // এলিমেন্ট সংখ্যা পড়া // printf("এলিমেন্টের সংখ্যা লিখুন: "); scanf("%d", &n); /* আউটপুট প্রিন্ট - if স্টেটমেন্ট ব্যবহার করা হয়েছে কারণ * মেমরি সফলভাবে অ্যালোকেট/রিজার্ভ হয়েছে কিনা চেক করতে হবে */ if(p == NULL){ printf("মেমরি উপলব্ধ নেই"); exit(0); } // ফর লুপ ব্যবহার করে এলিমেন্টগুলো লোকেশনে স্টোর করা // printf("এলিমেন্টগুলো লিখুন: \n"); for(i = 0; i < n; i++){ scanf("%d", p+i); } for(i = 0; i < n; i++){ if(*(p+i) % 2 == 0){ even = even + *(p+i); } else { odd = odd + *(p+i); } } printf("সম সংখ্যাগুলোর যোগফল: %d\n", even); printf("বিজোড় সংখ্যাগুলোর যোগফল: %d\n", odd); }
আউটপুট
উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −
এলিমেন্টের সংখ্যা লিখুন: ৪ এলিমেন্টগুলো লিখুন: 12 56 23 10 সম সংখ্যাগুলোর যোগফল: 78 বিজোড় সংখ্যাগুলোর যোগফল: 23