নियम: লোকাল ভেরিয়েবল স্কোপ বাইরে গেলে অ্যাক্সেস করা যায় না (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) করে পয়েন্টার রিটার্ন।