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

C++-এ delete[] কীভাবে অ্যারের আকার জানে?

new অপারেটর ডাইনামিক মেমরি অ্যালোকেশন করে (হিপে)। delete[] অপারেটর সেটি ডি-অ্যালোকেট করে। প্রশ্ন: delete[] কীভাবে অ্যারের আকার জানে?

উত্তর: new[] অ্যালোকেশন করার সময় ব্লকের শুরুতে (হেডারে) উপাদান সংখ্যা সংরক্ষণ করে রাখে। এই মেটাডেটা ব্যবহার করে delete[] জানে কতটুকু মেমরি ফ്രീ করতে হবে। এটি ইমপ্লিমেন্টেশন-স্পেসিফিক (কম্পাইলার নির্ভর) কিন্তু সব কম্পাইলার इसीভাবে করে।

উদাহরণ কোড: ২D ডাইনামিক অ্যারে অ্যালোকেশন ও ডি-অ্যালোকেশন

#include <iostream>
using namespace std;

int main() {
    int B = 4;  // রো
    int A = 5;  // কলাম

    // পয়েন্টার-টু-পয়েন্টার দিয়ে ২D অ্যারে
    int** a = new int*[B];  // রো পয়েন্টার অ্যারে

    for (int i = 0; i < B; ++i)
        a[i] = new int[A];  // প্রতিটি রো আলাদা আলাদা

    // ভ্যালু সেট
    for (int i = 0; i < B; ++i)
        for (int j = 0; j < A; ++j)
            a[i][j] = i;

    // প্রিন্ট
    for (int i = 0; i < B; ++i)
        for (int j = 0; j < A; ++j)
            cout << a[i][j] << "\n";

    // ডি-অ্যালোকেশন: 역বক্রমে
    for (int i = 0; i < B; ++i)
        delete[] a[i];  // প্রতিটি রো
    delete[] a;         // রো পয়েন্টার অ্যারে

    return 0;
}

আউটপুট

0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3

গুরুত্বপূর্ণ: ২D অ্যারেতে প্রতিটি রো আলাদা new[] দিয়ে অ্যালোকেট করা হয়েছে, তাই প্রতিটি রোকে আলাদা delete[] দিয়ে মুক্ত করতে হয়। সবশেষে রো পয়েন্টার অ্যারেকে delete[] দিয়ে মুক্ত করুন। আধুনিক C++-এ vector<vector<int>> বা vector<int> (ফ্ল্যাটেনড) ব্যবহার করা ভালো।

  1. OpenCV-এ C++ ব্যবহার করে রঙ ট্র্যাক করা

  2. C++-এ new ব্যবহার করে ডাইনামিক ২D অ্যারে ঘোষণা

  3. C++-এ ফাংশন থেকে অ্যারে রিটার্ন কীভাবে করবেন?

  4. C++-এ অ্যারে (Array) ব্যবহার করার পদ্ধতি