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

C++-এ ড্যанглিং, ভয়েড, নাল এবং 와일্ড পয়েন্টার

ড্যанглিং পয়েন্টার

ড্যанглিং পয়েন্টার হলো এমন পয়েন্টার যা ইতিমধ্যে ফ্রি বা ডিলিট করা মেমরি লোকেশনকে পয়েন্ট করে। পয়েন্টার ড্যанглিং হতে পারে নিম্নলিখিত উপায়ে:

ফাংশন কল

লোকাল ভেরিয়েবলে পয়েন্ট করার পয়েন্টার ড্যাংলিং হয়ে যায় যদি লোকাল ভেরিয়েবল static না হয়।

int* show(void) {
    int n = 76;
    return &n;
}

আউটপুট

গারবেজ ঠিকানা আউটপুট হবে।

মেমরি ডি-অ্যালোকেশন

int main() {
    float* p = (float*)malloc(sizeof(float));
    free(p);  // free() কল করার পর p ড্যাংলিং পয়েন্টার
    p = NULL; // এখন p ড্যাংলিং নয়
}

ভেরিয়েবল স্কোপ থেকে বাইরে যাওয়া

int main() {
    int* p;
    {
        int c;
        p = &c;
    }
    // এখানে p ড্যাংলিং পয়েন্টার
}

ভয়েড পয়েন্টার

ভয়েড পয়েন্টার যেকোনো ডেটা টাইপের সাথে জড়িত নয়। এটি স্টোরেজে ডেটা লোকেশনের ঠিকানা নির্দেশ করে। এটাকে জেনারেল পারপাস পয়েন্টারও বলা হয়।

সীমাবদ্ধতা:

  • কনক্রিট সাইজ না থাকায় পয়েন্টার আритমেটিক সম্ভব নয়।
  • এটি ডিরেফারেন্স করা যায় না।

উদাহরণ

#include <stdlib.h>
#include <iostream>
using namespace std;

int main() {
    int a = 7;
    float b = 7.6;
    void* p;
    p = &a;
    cout << *((int*)p) << endl;
    p = &b;
    cout << *((float*)p);
    return 0;
}

আউটপুট

7
7.600000

অ্যালগরিদম

Begin
    ইন্টিজার a এবং ফ্লোট b ইনিশিয়ালাইজ করুন।
    ভয়েড পয়েন্টার p ঘোষণা করুন।
    (int*)p = ভয়েডের টাইপ কাস্টিং।
    p = &b মানে p এখন ফ্লোট।
    (float*)p = ভয়েডের টাইপ কাস্টিং।
    মান প্রিন্ট করুন।
End.

নাল পয়েন্টার

নাল পয়েন্টার কোনো কিছুই পয়েন্ট করে না। এর ব্যবহার:

  • পয়েন্টার ভেরিয়েবল ইনিশিয়ালাইজ করার সময়যখন এখনো কোনো বৈধ ঠিকানা নেই।

  • ফাংশন আর্গুমেন্টে নাল পয়েন্টার পাস করুন যখন কোনো বৈধ ঠিকানা পাস করতে চান না।

  • পয়েন্টার অ্যাক্সেস করার আগে নাল চেক করুন তাতে ডিরেফারেন্স করার সময় এরর হ্যান্ডলিং করা যায়।

উদাহরণ

#include <iostream>
using namespace std;

int main() {
    int* p = NULL;
    cout << "The value of pointer is ";
    cout << p;
    return 0;
}

আউটপুট

The value of pointer is 0.

ওয়াইল্ড পয়েন্টার

ওয়াইল্ড পয়েন্টার যেকোনো আর্বিট্রারি মেমরি লোকেশনে পয়েন্ট করে (নালও নয়)।

int main() {
    int* ptr; // ওয়াইল্ড পয়েন্টার
    *ptr = 5; // অনির্দিষ্ট আচরণ
}
  1. C++-এ বাইনারি ট্রি নেক্সট রাইট পয়েন্টার II

  2. C++-এ কমপ্লিট বাইনারি ট্রি নেক্সট রাইট পয়েন্টার

  3. C/C++ পয়েন্টার (Pointer) vs জাভা রেফারেন্স (Reference) - পার্থক্য

  4. C++-এ স্মার্ট পয়েন্টার (Smart Pointer) কী এবং কখন ব্যবহার করবেন?