क्या स्थानीय चर की मेमोरी उसके दायरे से बाहर एक्सेस की जा सकती है?
नमस्ते, साथियों! मैंने हाल ही में C++ सीखना शुरू किया है और एक अजीब व्यवहार देखा। मैंने एक सरल फंक्शन लिखा जो स्थानीय चर का पॉइंटर लौटाता है:
```cpp
int* getPointer() {
int localVar = 42;
return &localVar;
}
int main() {
int* ptr = getPointer();
std::cout << *ptr << std::endl; // 42 प्रिंट करता है... कभी-कभी
// फिर से उपयोग करने की कोशिश करता हूँ
std::cout << *ptr << std::endl; // कचरा प्रिंट करता है या क्रैश होता है
}
```
मुझे लगा कि `getPointer()` फंक्शन से बाहर निकलने के बाद `localVar` वेरिएबल नष्ट हो जाता है और पॉइंटर हैंगिंग (dangling pointer) बन जाता है। लेकिन व्यवहार में पहला आउटपुट अक्सर सही मान 42 दिखाता है। ऐसा क्यों होता है? क्या यह undefined behavior है या इसका कोई स्पष्टीकरण है?
मुझे भ्रम है कि कभी-कभी प्रोग्राम 'सामान्य' रूप से काम करता है और कभी-कभी क्रैश हो जाता है। मैंने पढ़ा है कि स्टैक मेमोरी तुरंत साफ नहीं होती, लेकिन इसका मतलब यह नहीं कि इसका उपयोग किया जा सकता है? या मैं कुछ गलत समझ रहा हूँ? कृपया बताएं कि स्थानीय चर के जीवनकाल को सही तरीके से कैसे समझें।