क्या यह अवैध/खतरनाक है?स्टेटिक वैरिएबल पॉइंटर?
int* static_nonew()
{
static int n = 5;
return &n;
}
संकलक इसके साथ एक समस्या है प्रतीत नहीं होता है, लेकिन सूचक स्थान ही ओवरराइट जा रहा है जब किसी और स्मृति की आवश्यकता से सुरक्षित है?
संपादित करें: मैंने इस प्रश्न से पूछा क्यों एक स्पष्टीकरण का थोड़ा और अधिक। नोट: मैं सी ++ में प्रोग्रामिंग कर रहा हूं, मैंने इसे सी के रूप में टैग किया है क्योंकि यह सी ++ प्रश्न से सी की अधिक प्रतीत होता है।
मेरे पास एक कक्षा है जो एक स्थिर मानचित्र वापस करने वाला है। मैं केवल इस मानचित्र को कार्यक्रम में एक बार शुरू करना चाहता हूं क्योंकि ऐसा कई बार करने की आवश्यकता नहीं है।
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
संक्रमण वर्गों निर्माता बदलाव करने के लिए खुद को जोड़ना होगा: इस कारण से, मैं इस तरह कुछ है करने के लिए जा रहा था। इस तरह, यह एक बार संक्रमण बना देगा और फिर उन्हें एक सूचक वापस कर देगा। मुझे बस याद है कि यदि आप ढेर पर आवंटित चर के संदर्भ बनाते हैं, तो यह बहुत आसानी से ओवरराइट हो सकता है और "असुरक्षित" था। मैं बस थोड़ा उलझन में था कि फ़ंक्शन के काम में स्थिर चर कैसे बनाए गए थे।
यदि आपके मानचित्र को क्लाइंट कोड द्वारा बदला जाने की उम्मीद नहीं है तो आपको एक कॉन्स संदर्भ या एक कॉन्स्टेंट के लिए पॉइंटर वापस करना चाहिए। इससे स्थिर डेटा से जुड़े अधिकांश जोखिमों को खत्म कर दिया जाएगा। –