"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > नॉन-कॉन्स्ट पॉइंटर के माध्यम से कॉन्स्टेंट को संशोधित करने से अपरिभाषित व्यवहार क्यों उत्पन्न होता है?

नॉन-कॉन्स्ट पॉइंटर के माध्यम से कॉन्स्टेंट को संशोधित करने से अपरिभाषित व्यवहार क्यों उत्पन्न होता है?

2024-11-07 को प्रकाशित
ब्राउज़ करें:844

Why Does Modifying a Constant through a Non-const Pointer Produce Undefined Behavior?

एक गैर-कॉन्स्ट पॉइंटर के माध्यम से एक स्थिरांक को संशोधित करना: अपरिभाषित व्यवहार में तल्लीन करना

प्रदान किए गए कोड स्निपेट में, आप व्यवहार पर भ्रम व्यक्त करते हैं एक गैर-कॉन्स्ट सूचक के माध्यम से एक स्थिर पूर्णांक (e) को संशोधित करना (w):

const int e = 2;

int* w = (int*) &e;  // Casting to remove const-ness
*w = 5;            // Modifying the value pointed to by w

द्वारा इंगित मान को संशोधित करना यह संशोधन करने के बाद, आप देखते हैं कि:

  • w द्वारा इंगित मान प्रदर्शित हो रहा है ( cout w
  • हालाँकि, का मान प्रदर्शित किया जा रहा है e (*cout

आप आगे ध्यान दें कि पता w e के पते के समान है (cout cout w के माध्यम से किए गए संशोधन के बावजूद e कैसे अपरिवर्तित रहता है।

यह व्यवहार उस अपरिभाषित व्यवहार से उत्पन्न होता है जो एक गैर के माध्यम से एक स्थिरांक को संशोधित करते समय उत्पन्न होता है - स्थिरांक सूचक. एक बार जब आप ऐसा संशोधन करते हैं, तो कोड अपरिभाषित व्यवहार क्षेत्र में प्रवेश करता है, जहां यह अप्रत्याशित हो जाता है और विशिष्ट कार्यान्वयन विवरणों पर निर्भर करता है।

इस मामले में, ऐसा प्रतीत होता है कि w के माध्यम से संशोधन एक को प्रभावित करता है रनटाइम पर e की अस्थायी प्रतिलिपि, जबकि मूल e अपरिवर्तित रहती है। इसका कारण यह है कि e को संकलन-समय स्थिरांक के रूप में माना जाता है, और इसका मान बाइनरी कोड में हार्डकोड किया जाता है। इसलिए, w में कोई भी रनटाइम संशोधन मूल e को प्रभावित नहीं करेगा।

यह व्यवहार उपयोग किए गए कार्यान्वयन के लिए विशिष्ट है और इस पर भरोसा नहीं किया जाना चाहिए। नॉन-कॉन्स्ट पॉइंटर्स के माध्यम से निरंतर डेटा को संशोधित करना एक बुरा अभ्यास माना जाता है और इससे बचा जाना चाहिए। सही दृष्टिकोण एक गैर-कॉन्स्ट संदर्भ का उपयोग करना या उस डेटा की एक गैर-कॉन्स्ट कॉपी बनाना है जिसे आप संशोधित करना चाहते हैं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3