आप एक बार स्कोप से बाहर जाने के बाद लोकल वेरिएबल को एक्सेस नहीं कर सकते। लोकल वेरिएबल होने का यही अर्थ है। हालांकि, आइए एक ऐसे उदाहरण को देखें जहां आप एक लोकल वेरिएबल की मेमोरी को इसके स्कोप के बाहर एक्सेस करने में सक्षम हो सकते हैं।
उदाहरण
#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 के स्कोप के बाहर हैं, पता किसी रैंडम मेमोरी एरिया का पॉइंटर है। उपरोक्त उदाहरण में, वह मेमोरी एरिया मौजूद है और फिलहाल कुछ भी उसका उपयोग नहीं कर रहा है। आप इसका उपयोग जारी रखकर कुछ भी नहीं तोड़ते (आप किसी अन्य प्रोसेस के मेमोरी एरिया या किसी अन्य अनधिकृत मेमोरी एरिया का उपयोग नहीं करेंगे), और अभी तक किसी और चीज ने इसे ओवरराइट नहीं किया है। इसलिए, 3 अभी भी वहां है।
एक वास्तविक प्रोग्राम में, उस मेमोरी को लगभग तुरंत पुनः उपयोग किया जा सकता है और आप ऐसा करके कुछ तोड़ देंगे। ऐसे मेमोरी एक्सेस बग्स को ट्रैक करना और मारना बहुत मुश्किल होता है।
जब आप foo से रिटर्न करते हैं, तो प्रोग्राम OS को बताता है कि x की मेमोरी अब उपयोग नहीं की जा रही है और इसे किसी और चीज को रीअसाइन किया जा सकता है। यदि आप भाग्यशाली हैं और यह रीअसाइन हो जाता है, और OS आपको इसका फिर से उपयोग करते हुए नहीं पकड़ता, तो आप इससे बच सकते हैं।