कुछ खास नहीं होगा। आप आवंटित स्मृति के बीच में कुछ जगह पर लिखेंगे (प्रारंभ से अलग 100 बाइट, आवंटित स्मृति के अंत से पहले 99 बाइट्स)।
फिर आप आवंटित स्मृति को मुक्त कर देंगे। संकलक इसे ठीक तरह से संभाल लेंगे जैसा हम उम्मीद करेंगे। इसके द्वारा आवंटित स्मृति शून्य समाप्त तारों से पूरी तरह से असंबंधित है। आप उस स्मृति में जो कुछ भी चाहते हैं उसे छू सकते हैं। यह भंडारण का कुछ "कच्चा" हिस्सा है, आप उस स्मृति में कुछ मनमानी सी ++ ऑब्जेक्ट भी बना सकते हैं (प्लेसमेंट नया)।
आपकी बग कहीं और है। उदाहरण के लिए, कुछ सामान्य त्रुटि यह एक है, जहां निर्माता एक बार कहा जाता है डबल को हटाने कुछ है, लेकिन नाशक दो बार कहा जाता है,:
struct A { P *p; A() { p = new P; } ~A() { delete p; } };
A getA() { return A(); } int main() { A a = getA(); }
अब, क्या होता है कि डिफ़ॉल्ट निर्माता एक बार कहा जाता है, और है बनाई गई वस्तु को शून्य या अधिक बार कॉपी किया गया है। लेकिन विनाशक बनाई गई प्रत्येक प्रतिलिपि के लिए चलाया जाता है। इस प्रकार, आप पॉइंटर पर एक से अधिक बार विनाशक को बुलाएंगे, जिससे ऐसी अजीब चीजें होती हैं। को ठीक करने का सही तरीका एक स्मार्ट पॉइंटर का उपयोग करना है, जैसे shared_ptr
। एक अभ्यास के रूप में, आप बिना उचित कॉपी कन्स्ट्रक्टर लिखकर, बिना ऑब्जेक्ट की प्रतिलिपि बना सकते हैं और कॉपी कन्स्ट्रक्टर में मेमोरी आवंटित कर सकते हैं, ताकि प्रतिलिपि और संबंधित मूल वस्तु अलग-अलग पॉइंटर्स रख सके।
स्रोत
2009-04-18 14:36:46
_ "हटाएं नापसंद के बारे में पता नहीं है या परवाह नहीं है ..." _ यह सच नहीं है। यदि आपके पास 'p [2]' है, तो आप गलती से 'p [2] =' \ 0'' 'सेट करते हैं,' p' को हटाने से स्मृति-संबंधित त्रुटि मिल जाएगी, जाहिर है क्योंकि पी [2] पर मेमोरी को हटाना है का प्रयास किया। – user3140280
यह सच है। मेरे पास एक ही परिदृश्य के लिए एक ढेर भ्रष्टाचार था। मेरे पास आकार 10 की एक सरणी थी। मैंने गलती से सरणी [10] = '\ 0' सेट की है और जब मैं [] सरणी हटाता हूं, तो मुझे भ्रष्टाचार में भ्रष्टाचार की त्रुटि मिलती है। इसे ठीक किया और यह चला गया। कुछ नया सीख लिया। – Nazeeh
@Nazeeh आपने यहां कुछ गलत सीखा होगा या आपने जो कुछ समझ लिया है उसे बिल्कुल उद्धृत नहीं किया हो सकता है। आकार 10 की एक सरणी में, 10 वीं तत्व 9वीं इंडेक्स पर है, 10 नहीं, अगर आप 10 वीं इंडेक्स पर कुछ भी लिखते हैं और लिखते हैं, तो आपने पहले से ही ढेर दूषित कर दिया है, आपके ऐप को क्रैश करने के लिए डिलीट करना अप्रासंगिक है, आपका ऐप क्रैश करने के लिए बाध्य है वैसे भी, यह सिर्फ समय की बात है। आपकी गलती के ठीक बाद कॉलिंग को हटाएं बस आप भाग्यशाली हैं कि आपको जल्द ही गलती (और एक सरल उपयोग मामले में) देखने की आवश्यकता है, फिर इस त्रुटि को खोजने के लिए एक गन्दा विवरण से गुजरना है। – user734028