Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

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

एक वास्तविक प्रोग्राम में, उस मेमोरी को लगभग तुरंत पुनः उपयोग किया जा सकता है और ऐसा करने से आप कुछ न कुछ तोड़ देंगे। ऐसे मेमोरी एक्सेस बग्स को ट्रैक करना और ठीक करना बहुत मुश्किल होता है।

जब आप foo से रिटर्न होते हैं, तो प्रोग्राम OS को बताता है कि x की मेमोरी अब उपयोग में नहीं है और इसे किसी और चीज़ के लिए पुनः असाइन किया जा सकता है। यदि आप भाग्यशाली हैं और इसे पुनः असाइन नहीं किया गया है, और OS आपको इसे फिर से उपयोग करते हुए नहीं पकड़ता, तो आप इससे बच सकते हैं।

  1. - लिनक्स पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां लिनक्स के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। NetBeans

  1. - विंडोज पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां विंडोज के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। Visual S

  1. - क्या C++ वेरिएबल const और volatile दोनों हो सकता है?

    हां, एक C++ वेरिएबल const और volatile दोनों हो सकता है। इसका उपयोग उन स्थितियों में किया जाता है जैसे रीड-ओनली हार्डवेयर रजिस्टर, या किसी अन्य थ्रेड का आउटपुट। Volatile का अर्थ है कि इसे करंट थ्रेड के लिए बाहरी किसी चीज़ द्वारा बदला जा सकता है और Const का अर्थ है कि आप उसमें नहीं लिखते (उस प्रोग्राम