C में पॉइंटर्स को हटाने के बाद
C में, मेमोरी प्रबंधन महत्वपूर्ण है, और एक प्रमुख पहलू किसी ऑब्जेक्ट को हटाने के बाद पॉइंटर्स को संभालना है। निम्नलिखित कोड हटाने के बाद पॉइंटर वैधता के बारे में प्रश्न उठाता है:
A* a = new A();
A* b = a;
delete a;
A* c = a; // illegal in C 11
A* d = b; // is it legal?
हटाने के बाद पॉइंटर वैधता को समझना
सी मानक के अनुसार, संबंधित ऑब्जेक्ट को हटाए जाने के बाद एक पॉइंटर द्वारा इंगित किए गए स्टोरेज को संदर्भित करना अपरिभाषित है और इसके परिणामस्वरूप अप्रत्याशित व्यवहार हो सकता है। यह मूल पॉइंटर (इस मामले में ए) और उस पॉइंटर (बी) की प्रतियों दोनों पर लागू होता है।
सी 11 में, ए को हटाने के बाद ए या बी के मान तक पहुंचना अपरिभाषित व्यवहार है। सी 14 मानक इस व्यवहार को स्पष्ट करता है, जिसमें कहा गया है कि दोनों क्रियाओं में कार्यान्वयन-परिभाषित व्यवहार है। इसका मतलब यह है कि परिणाम कंपाइलर या रनटाइम वातावरण के विशिष्ट कार्यान्वयन पर निर्भर करता है। कार्यान्वयन-परिभाषित व्यवहार के लिए हटाए गए पॉइंटर्स की प्रतियों सहित)। इसका मतलब यह है कि अलग-अलग कंपाइलर या ऑपरेटिंग सिस्टम इन स्थितियों को अलग-अलग तरीके से संभाल सकते हैं।
कुछ कार्यान्वयन सिस्टम-जनरेटेड रनटाइम गलती उत्पन्न कर सकते हैं, जबकि अन्य अप्रत्याशित व्यवहार प्रदर्शित कर सकते हैं या प्रोग्राम को समाप्त कर सकते हैं। इसलिए, हटाए गए ऑब्जेक्ट को संदर्भित करने वाले पॉइंटर्स का उपयोग करने से बचना आवश्यक है, जिसमें उन पॉइंटर्स की प्रतियां भी शामिल हैं।
निष्कर्षसंक्षेप में, एक पॉइंटर के मूल्य तक पहुंच (या संबंधित ऑब्जेक्ट को हटाने के बाद इसकी प्रतियां खतरनाक हैं और इससे अपरिभाषित या कार्यान्वयन-परिभाषित व्यवहार हो सकता है। यह सुनिश्चित करना महत्वपूर्ण है कि पॉइंटर्स हमेशा वैध ऑब्जेक्ट्स को इंगित करें और ऐसे मुद्दों को रोकने के लिए मेमोरी प्रबंधन को उचित रूप से संभालें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3