কম্পিউটার টিউটোরিয়াল

সি/সি++-এ মেমরি লিক কী এবং এর কারণ

মেমরি লিক (Memory Leak) হলো এমন একটি পরিস্থিতি যেখানে প্রোগ্রামার ডাইনামিক্যালি মেমরি অ্যালোকেট করে (যেমন malloc, calloc, new ব্যবহার করে) কিন্তু ব্যবহার শেষে সেটি ডি-অ্যালোকেট করে না (free বা delete কল করে না)। ফলে সে মেমরি ব্লক আর প্রোগ্রামের কাজে লাগে না, কিন্তু অপারেটিং সিস্টেমের কাছে সেটি "ব্যবহৃত" হিসেবে থাকে। এটি মেমরি বর্জ্য করে এবং দীর্ঘসময় চললে সিস্টেমের পারফরম্যান্স ধীর করে দেয়।

উদাহরণ ১: সি++-এ মেমরি লিক

void my_func() {
    int *data = new int;
    *data = 50;
    // delete data; কল করা হয়নি — মেমরি লিক
}

এখানে data পয়েন্টারের মাধ্যমে অ্যালোকেট করা মেমরি কখনো delete করা হয়নি। ফাংশন শেষ হলে পয়েন্টারটি নষ্ট হয়ে যায়, কিন্তু হিপ মেমরিটি মুক্ত হয় না।

উদাহরণ ২: নেস্টেড ফাংশন ডিক্লেরেশন (সি)

#include <stdio.h>

int main(void) {
    auto int my_fun();
    my_fun();
    printf("Main Function\n");
    int my_fun() {
        printf("my_fun function\n");
    }
    printf("Done");
    return 0;
}

আউটপুট

my_fun function
Main Function
Done

মেমরি লিকের প্রভাব

  • প্রোগ্রাম চলাকালীন মেমরি ব্যবহার বেড়ে যায়
  • সিস্টেম ধীর হয় বা ক্র্যাশ করতে পারে
  • লং-রানিং সার্ভার/ডেমন প্রোগ্রামে এটি গুরুতর সমস্যা

প্রতিকার

  • প্রতিটি malloc/new-এর জন্য মিলিত free/delete নিশ্চিত করুন
  • স্মার্ট পয়েন্টার (C++: unique_ptr, shared_ptr) ব্যবহার করুন
  • ভ্যালগ্রিন্ড (Valgrind) এর মতো টুল দিয়ে লিক শনাক্ত করুন
  1. C/C++-এ টাইপ কাস্টিং (Type Casting) কী?

  2. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  3. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  4. মেমরি লিক কী? এটিকে কীভাবে রোধ করবেন?