🎯 এই পর্বে যা জানবে:
- ডাইনামিক মেমোরি অ্যালোকেশন কী
- malloc(), calloc(), realloc() এবং free() এর কাজ
- কেন ও কখন ডাইনামিক মেমোরি দরকার
- বাস্তব উদাহরণসহ কোড
- মেমোরি লিক এড়ানোর উপায়
🧠 ডাইনামিক মেমোরি অ্যালোকেশন কী?
C প্রোগ্রামে সাধারণত আমরা স্ট্যাটিক মেমোরি ব্যবহার করি — যেমন অ্যারের সাইজ আগে থেকেই নির্ধারিত থাকে।
কিন্তু অনেক সময় প্রোগ্রাম চলার সময় (runtime) মেমোরি প্রয়োজন হয়, তখনই দরকার হয়
👉 ডাইনামিক মেমোরি অ্যালোকেশন (Dynamic Memory Allocation)।
ডাইনামিক মেমোরি ব্যবহার করলে আমরা রানটাইমে মেমোরি তৈরি ও মুক্ত করতে পারি, ফলে প্রোগ্রাম আরও স্মার্ট ও কার্যকর হয়।
⚙️ কেন ডাইনামিক মেমোরি দরকার?
✅ যখন ডেটার সাইজ আগে থেকে জানা থাকে না
✅ বড় অ্যারে তৈরি করতে হয় কিন্তু নির্দিষ্ট সাইজ জানা নেই
✅ মেমোরি ব্যবহারে দক্ষতা বাড়াতে
✅ স্ট্যাক ওভারফ্লো সমস্যা এড়াতে
🔹 malloc() ফাংশন
malloc() অর্থ Memory Allocation — এটি নির্দিষ্ট বাইট পরিমাণ মেমোরি বরাদ্দ করে এবং তার শুরু অ্যাড্রেস রিটার্ন করে।
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
int n, i;
printf("কতটি সংখ্যা নিতে চান: ");
scanf("%d", &n);
ptr = (int*) malloc(n * sizeof(int));
if(ptr == NULL) {
printf("মেমোরি বরাদ্দ হয়নি!\n");
return 1;
}
for(i = 0; i < n; i++) {
printf("সংখ্যা %d: ", i+1);
scanf("%d", &ptr[i]);
}
printf("\nআপনার সংখ্যাগুলো:\n");
for(i = 0; i < n; i++) {
printf("%d ", ptr[i]);
}
free(ptr);
return 0;
}আউটপুট:
কতটি সংখ্যা নিতে চান: 3
সংখ্যা 1: 10
সংখ্যা 2: 20
সংখ্যা 3: 30
আপনার সংখ্যাগুলো:
10 20 30🔹 calloc() ফাংশন
calloc() অর্থ Contiguous Allocation — এটি একাধিক এলিমেন্টের জন্য মেমোরি বরাদ্দ করে এবং সমস্ত বাইট শূন্য (0) দিয়ে initialize করে।
int *ptr;
ptr = (int*) calloc(5, sizeof(int));এখানে ৫টি ইন্টিজার এলিমেন্টের জন্য মেমোরি বরাদ্দ হবে এবং সবগুলো 0 থাকবে।
🔹 realloc() ফাংশন
realloc() ব্যবহৃত হয় পূর্বে বরাদ্দ করা মেমোরি আবার বাড়ানো বা কমানোর জন্য।
ptr = (int*) realloc(ptr, 10 * sizeof(int));এখানে ৫টির জায়গায় এখন ১০টি এলিমেন্ট রাখা যাবে।
🔹 free() ফাংশন
free() ফাংশন দিয়ে বরাদ্দ করা মেমোরি মুক্ত করতে হয়, নইলে মেমোরি লিক হতে পারে।
free(ptr);⚠️ মেমোরি লিক (Memory Leak)
যদি প্রোগ্রাম শেষে free() ব্যবহার না করা হয়, তাহলে সেই মেমোরি সিস্টেমে থেকে যায় — একে বলে Memory Leak।
বড় প্রোগ্রামে এটি পারফরম্যান্সে বড় ক্ষতি করতে পারে।
🚀 সংক্ষেপে
malloc()→ একবারে মেমোরি বরাদ্দcalloc()→ একাধিক ব্লক বরাদ্দ ও 0 দিয়ে initializerealloc()→ পূর্বের ব্লক বাড়ানো/কমানোfree()→ মেমোরি মুক্ত করা- মেমোরি লিক থেকে বাঁচতে সবসময়
free()ব্যবহার করতে হবে



