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

एक ही ऐरे से स्लाइस में जोड़ने पर वेरिएबल ओवरराइट क्यों होता है?

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

Why Does Variable Overwrite Occur in Go When Appending to Slices from the Same Array?

गो में वेरिएबल ओवरराइटिंग का कारण

आपका कोड एक वेरिएबल ओवरराइटिंग समस्या का सामना करता है क्योंकि आप उसी बैकिंग ऐरे में तत्वों को जोड़कर नए स्लाइस (पाथए और पाथबी) बना रहे हैं (मार्ग) एक लूप के भीतर।

स्लाइस पर पृष्ठभूमि गो:

  • ए गो स्लाइस एक डेटा संरचना है जो एक ही प्रकार के तत्वों के एक सन्निहित ब्लॉक का प्रतिनिधित्व करती है।
  • स्लाइस की लंबाई होती है (वर्तमान में संग्रहीत तत्वों की संख्या) ) और एक क्षमता (तत्वों की अधिकतम संख्या जो इसे धारण कर सकती है)।
  • जब आप एक स्लाइस को संशोधित करते हैं, तो यह एक नई बैकिंग सरणी के आवंटन को ट्रिगर कर सकता है यदि क्षमता है पार हो गया।

आपके कोड के साथ समस्या:

आपके कोड में, आप एपेंड फ़ंक्शन का उपयोग करके दो नए स्लाइस, pathA और pathB बना रहे हैं:

pathA := append(route, nextA)
pathB := append(route, nextB)

यहां क्या होता है:

  1. प्रारंभ में, रूट में एक क्षमता होती है जो नेक्स्टए और नेक्स्टबी दोनों को फिट कर सकती है। तो, रूट के समान बैकिंग ऐरे के साथ दो नए स्लाइस (पथए और पथबी) बनाए जाते हैं।
  2. जैसे-जैसे लूप आगे बढ़ता है और आप रूट में जुड़ना जारी रखते हैं, इसकी क्षमता अंततः इसकी लंबाई से अधिक हो जाती है।
  3. लूप के बाद के पुनरावृत्ति में, रूट के लिए एक नया बैकिंग ऐरे आवंटित किया जाता है। हालाँकि, pathA और pathB अभी भी पुराने बैकिंग ऐरे को संदर्भित करते हैं।
  4. नतीजतन, pathA और pathB दोनों का अंत एक ही होता है value.
  5. समाधान:

इस ओवरराइटिंग से बचने के लिए, आपको यह सुनिश्चित करना होगा कि pathA और pathB में अद्वितीय बैकिंग ऐरे हों। आप मेक और कॉपी का उपयोग करके उनमें से किसी एक के लिए मैन्युअल रूप से एक नया स्लाइस बनाकर इसे प्राप्त कर सकते हैं:

newRoute := make([]int, len(route), (cap(route) 1)*2) प्रतिलिपि (नया मार्ग, मार्ग) यदि मैं % 2 == 0 { पथए:= संलग्न करें(नयारूट, अगलाए) } अन्य { पथबी:= संलग्न करें(नयारूट, अगलाबी) }

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729727920 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3