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

C++-এ পয়েন্টার ব্যবহার করে অন্য ফাংশনের লোকাল ভেরিয়েবল অ্যাক্সেস করা (খুঁটিনাটি ওপাশে)

নियम: লোকাল ভেরিয়েবল স্কোপ বাইরে গেলে অ্যাক্সেস করা যায় না (Undefined Behaviour)। তবে মেমরি এখনও থাকতে পারে।

উদাহরণ (শুধু শিক্ষার্থী উদ্দেশ্যে, প্রোডাকশনে কখনো করবেন না)

#include <iostream>

int* foo() {
    int x = 3;
    return &x; // খুব ভুল! লোকাল ভেরিয়েবলের ঠিকানা রিটার্ন
}

int main() {
    int* address = foo();
    cout << *address;  // 3 প্রিন্ট হতে পারে (লাকি)
    *address = 12;     // মেমরি করাপ্ট করছে
    cout << *address;  // 12
}

আউটপুট (সম্ভব)

3
12

কেন কাজ করতে পারে? ফাংশন রিটার্ন করার পর স্ট্যাক ফ্রেম ডিঅ্যালোকেট হয়, কিন্তু মেমরি কন্টেন্ট অবিচ্ছিন্ন থাকে। যদি সেই মেমরি অন্য কাজে লাগে না, তবে পুরানো মান পাওয়া যায়।

বাস্তবে: এটি অপ্রেডিক্টেবল, ডেঞ্জারাস, এবং বাগ খুঁজে বের করা প্রায় অসম্ভব। কখনো করবেন না।

সঠিক পদ্ধতি: রিটার্ন বাই ভ্যালু, রেফারেন্স পাস করে আউটপুট প্যারামিটার, বা হিপ-এ অ্যালোকেট (new/make_unique) করে পয়েন্টার রিটার্ন।

  1. OpenCV-এ C++ ব্যবহার করে উপবৃত্ত আঁকা

  2. OpenCV-এ C++ ব্যবহার করে রেখা আঁকা

  3. OpenCV-এ C++ ব্যবহার করে ইমেজকে আলাদা চ্যানেলে ভাগ করা

  4. OpenCV-এ C++ ব্যবহার করে ইমেজ লোড ও প্রদর্শন করা