मुझे एक सी ++ रीफ्रेशर चाहिए। यह स्मृति अपवाद क्यों देता है?चार * नई और हटाएं [] त्रुटि जब एक स्ट्रिंग असाइन की जाती है
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
मुझे एक सी ++ रीफ्रेशर चाहिए। यह स्मृति अपवाद क्यों देता है?चार * नई और हटाएं [] त्रुटि जब एक स्ट्रिंग असाइन की जाती है
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
1024 चरित्र के लिए मेमोरी और यह के शुरू करने के pear
अंक ढेर से आवंटित किया जाता है।
pear = "happy go lucky";
pear
अब स्ट्रिंग शाब्दिक जो केवल पढ़ने के खंड में रहता है और पहले से आबंटित स्मृति लीक कर रहा है के लिए अंक।
delete [] pear;
आप केवल पढ़ने के लिए स्ट्रिंग है, जो एक अपरिभाषित व्यवहार एक क्रम अपवाद के रूप में प्रकट होता है मुक्त करने के लिए प्रयास करें।
एएच थे! यह सही है ... धन्यवाद। – Jake
नाशपाती = "खुश भाग्यशाली जाना";
यह की जगह सूचक new char[]
द्वारा आवंटित। तो अब आपके delete[] pear
स्थिर आवंटित स्ट्रिंग को मुक्त करने का प्रयास करता है।
यह बुरा है। आप केवल delete
कर सकते हैं जो आप new
के साथ आवंटित करते हैं। और चूंकि आप उस पॉइंटर को ओवरराइट (और खो देते हैं), तो आप delete
नहीं कर सकते हैं।
+1 क्योंकि आप पहले – Jake
आप जो कर रहे हैं वह pear
को ढेर पर वर्णों की आवंटित सरणी में असाइन करना है, और उसके बाद स्थिर स्थिति में मौजूद स्ट्रिंग को इंगित करने के लिए इसे पुन: असाइन करना है। यदि आप इसे हटाने का प्रयास करते हैं तो यह त्रुटि होगी क्योंकि आपको उस स्थिर स्थान में सामान को हटाना नहीं है।
'char * नाशपाती = नया चार [1024]; 'के बराबर पहली पंक्ति है? –