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

C/C++-এ লোকাল ভেরিয়েবলের মেমরি কি এর স্কোপের বাইরে থেকে অ্যাক্সেস করা যায়?


আসুন একটি উদাহরণ দেখি যেখানে আপনি হয়তো একটি লোকাল ভেরিয়েবলের মেমরি এর স্কোপের বাইরে থেকে অ্যাক্সেস করতে পারেন।

উদাহরণ

#include <iostream>
int* foo() {
    int x = 3;
    return &x;
}
int main() {
    int* address = foo();
    cout << *address;
    *address = 12;
    cout << *address;
}

আউটপুট

এটি নিচের আউটপুট দিতে পারে:

3 12

যেমন أنني আগে বলেছি, এই কোড হয়তো কাজ করবে। আমরা শুধু সেটি মেমরি পড়ছি এবং লিখছি যা পূর্বে x-এর ঠিকানা ছিল। main-এ, আপনি foo-এর স্কোপের বাইরে আছেন, পয়েন্টারটি কিছু যাদুকরী মেমরি এলাকার দিকে নির্দেশ করছে। উপরের উদাহরণে, সেই মেমরি এলাকা বর্তমানে আছে এবং অন্য কিছুতে ব্যবহার হচ্ছে না। আপনি এটিকে ব্যবহার চালিয়ে যাওয়ায় কিছু ভাঙবেন না (আপনি অন্য প্রসেসের মেমরি বা অন্য অনুমতিহীন মেমরি এলাকা ব্যবহার করবেন না), এবং এখনো কিছুই এটিকে ওভাররাইট করেনি। তাই ৩টি এখনো সেখানে আছে।

একটি আসল প্রোগ্রামে, সেই মেমরি হয়তো hampir অবিলম্বে পুনরায় ব্যবহার করা হয়েছে এবং আপনি এইরকম কিছু করার ফলে কিছু ভাঙতে পারেন। এ ধরনের মেমরি অ্যাক্সেস বাগ খুব কঠিনভাবে ট্র্যাক করা যায় এবং ফিক্স করা যায়।

যখন আপনি foo থেকে রিটার্ন করেন, প্রোগ্রাম অপারেটিং সিস্টেমকে বলে যে x-এর মেমরি আর ব্যবহার হচ্ছে না এবং এটি অন্য কিছুর জন্য পুনরায় দিতে পারে। আপনি যদি ভাগ্যবান হন এবং এটি পুনরায় আর্টিকেল করা হয়, এবং ওএস আপনাকে আবার ব্যবহার করার সময় ধরে না, তাহলে আপনি এর সাথে দেড়াতে পারেন।


  1. লিনাক্সে C++-এর জন্য সেরা IDE কী?

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

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

  4. কি C++ ভেরিয়েবল একসাথে const এবং volatile হতে পারে?