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

क्या स्थानीय चर की स्मृति को सी/सी ++ में इसके दायरे से बाहर पहुंचा जा सकता है?


आइए हम एक उदाहरण देखते हैं जहां आप किसी स्थानीय चर की मेमोरी को उसके दायरे से बाहर एक्सेस करने में सक्षम हो सकते हैं।

उदाहरण

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

int main() {
   int* address = foo();
   cout << *address;
   *address = 12;
   cout << *address;
}

आउटपुट

यह आउटपुट दे सकता है -

3
12

जैसा कि मैंने पहले उल्लेख किया है, यह कोड काम कर सकता है। हम केवल स्मृति को पढ़ और लिख रहे हैं जो कि x का पता हुआ करता था। मुख्य रूप से, आप फू के दायरे से बाहर हैं, पता कुछ यादृच्छिक स्मृति क्षेत्र का सूचक है। उपरोक्त उदाहरण में, वह स्मृति क्षेत्र मौजूद है और इस समय कुछ और इसका उपयोग नहीं कर रहा है। आप इसका उपयोग जारी रखने से कुछ भी नहीं तोड़ते हैं (आप किसी अन्य प्रक्रिया 'मेमोरी एरिया या किसी अन्य अनधिकृत मेमोरी एरिया का उपयोग नहीं करेंगे), और किसी और ने इसे अभी तक अधिलेखित नहीं किया है। इसलिए, 3 अभी भी वहीं है।

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

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


  1. Linux पर c++ के लिए शीर्ष IDE क्या है?

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

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

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

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

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