आपको प्रोग्राम करना चाहिए जैसे पुराना सूचक ओवरराइट हो गया है, हां। पुरानी मेमोरी अब आवंटित नहीं की जाती है, इसलिए आपके प्रोग्राम के दूसरे भाग (या उदाहरण के लिए सिस्टम थ्रेड) द्वारा फिर से आवंटित किया जा सकता है और रीयलोक कॉल करने के बाद किसी भी समय लिखा जा सकता है।
नई मेमोरी में हमेशा वही डेटा होगा जो पुरानी मेमोरी में मौजूद था (हालांकि यदि आवश्यक हो तो यह आपके लिए कॉपी किया गया है), लेकिन केवल पुराने ब्लॉक के आकार तक, अंत में आवंटित कोई भी अतिरिक्त स्थान अनियंत्रित हो।
यदि आप एक प्रतिलिपि चाहते हैं तो एक नया मॉलोक करें और memcpy का उपयोग करें।
कार्यान्वयन के लिहाज से, जब आप वृद्धि आकार के realloc कहते हैं, इन बातों में से एक हो सकता है:
- एक नया ब्लॉक आवंटित किया जाता है और पुराने स्मृति की सामग्री को कॉपी, पुराने ब्लॉक है मुक्त, नया सूचक वापस आ गया है।
- यदि ब्लॉक के बाद क्षेत्र आवंटित नहीं किया गया है, तो मौजूदा ब्लॉक बढ़ाया जा सकता है और एक ही सूचक वापस लौटाया जा सकता है।
आप जो हुआ है, या यहाँ तक कि अगर इसके बाद के संस्करण सुझाव दिया है कि करने के लिए एक पूरी तरह से अलग कार्यान्वयन प्रयोग किया जाता है, तो आप हमेशा realloc की कल्पना है, जो यह है कि आप उपयोग नहीं करना चाहिए के अनुसार कोड चाहिए जानने का कोई तरीका नहीं है के बाद से पुराना सूचक अब और आपको नए का उपयोग करना होगा।
+1: डी – zeboidlund
'oldpointer = newpointer; '' newpointer' को मुक्त किया जाना चाहिए या मुझे इसे रखना चाहिए? –
'oldpointer = newpointer के बाद; 'दोनों पॉइंटर्स स्मृति के उसी क्षेत्र को इंगित करते हैं। 'मुक्त (नया सूचक) करना; '' मुक्त (पुराना पॉइंटर) जैसा ही होगा; '। आप किसी भी तरह से 'newpointer' के साथ गड़बड़ नहीं करना चाहते हैं: बस भूल जाओ कि यह मौजूद है। – pmg