কম্পিউটার

একটি স্থানীয় ভেরিয়েবলের মেমরি 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 এর ঠিকানা হিসাবে ব্যবহৃত হয়। প্রধানত, আপনি foo এর সুযোগের বাইরে আছেন, ঠিকানাটি কিছু র্যান্ডম মেমরি এলাকায় একটি নির্দেশক। উপরের উদাহরণে, সেই মেমরি ক্ষেত্রটি বিদ্যমান এবং অন্য কিছুই এই মুহূর্তে এটি ব্যবহার করছে না। আপনি এটি ব্যবহার চালিয়ে যাওয়ার মাধ্যমে কিছু ভাঙবেন না (আপনি অন্য প্রক্রিয়ার মেমরি এলাকা বা অন্য কোনো অননুমোদিত মেমরি এলাকা ব্যবহার করবেন না), এবং অন্য কিছুই এটিকে ওভাররাইট করেনি। তাই, 3টি এখনও সেখানে আছে৷

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

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


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

  2. লিনাক্সে c++ এর জন্য শীর্ষ IDE কি?

  3. উইন্ডোতে c++ এর জন্য শীর্ষ IDE কি?

  4. একটি C++ ভেরিয়েবল কনস্ট এবং উদ্বায়ী উভয়ই হতে পারে?