C ++ realloc () - C ++ मानक पुस्तकालय

C ++ में Realloc () फ़ंक्शन मेमोरी को ब्लॉक करता है जो पहले आवंटित किया गया था लेकिन अभी तक मुक्त नहीं हुआ है।

Realloc () फ़ंक्शन reallocates मेमोरी को पहले मॉलॉक (), calloc () या realloc () फ़ंक्शन का उपयोग करके आवंटित किया गया था और अभी तक फ्री () फ़ंक्शन का उपयोग करके मुक्त नहीं किया गया है।

यदि नया आकार शून्य है, तो लौटाया गया मान लाइब्रेरी के कार्यान्वयन पर निर्भर करता है। यह अशक्त सूचक वापस कर सकता है या नहीं।

realloc () प्रोटोटाइप

 शून्य * realloc (शून्य * ptr, size_t new_size);

फ़ंक्शन को हेडर फ़ाइल में परिभाषित किया गया है।

realloc () पैरामीटर

  • ptr: एक पॉइंटर को मेमोरी ब्लॉक में दोबारा लाया जाता है।
  • new_size: एक अहस्ताक्षरित अभिन्न मूल्य जो बाइट्स में मेमोरी ब्लॉक के नए आकार का प्रतिनिधित्व करता है।

realloc () वापसी मान

Realloc () फ़ंक्शन रिटर्न:

  • Reallocated मेमोरी ब्लॉक की शुरुआत के लिए एक सूचक।
  • यदि आवंटन विफल रहता है तो अशक्त सूचक।

मेमोरी को पुनः लोड करते समय, यदि पर्याप्त मेमोरी नहीं है, तो पुराने मेमोरी ब्लॉक को मुक्त नहीं किया जाता है और एक शून्य पॉइंटर लौटाया जाता है।

यदि पुराना पॉइंटर (यानी पीटीआर) शून्य है, तो रियललॉक () कॉलिंग मॉलॉक () फ़ंक्शन के रूप में नए पैरामीटर के साथ अपने पैरामीटर के समान है।

मेमोरी को पुनः प्राप्त करने के दो संभावित तरीके हैं।

  1. एक ही ब्लॉक का विस्तार या अनुबंध करना : पुराने पॉइंटर (यानी पीटीआर) द्वारा इंगित मेमोरी ब्लॉक का विस्तार या अनुबंध किया जाता है, यदि संभव हो तो। मेमोरी ब्लॉक की सामग्री नए और पुराने आकारों के कम तक अपरिवर्तित रहती है। यदि क्षेत्र का विस्तार किया जाता है, तो नए आवंटित ब्लॉक की सामग्री अपरिभाषित है।
  2. नए स्थान पर जाना : नए_साइज़ बाइट्स के आकार का एक नया मेमोरी ब्लॉक आवंटित किया गया है। इस मामले में भी, मेमोरी ब्लॉक की सामग्री नए और पुराने आकारों के कम तक अपरिवर्तित रहती है और यदि मेमोरी का विस्तार होता है, तो नए आवंटित ब्लॉक की सामग्री अपरिभाषित होती है।

उदाहरण 1: realloc () फ़ंक्शन कैसे काम करता है?

 #include #include using namespace std; int main() ( float *ptr, *new_ptr; ptr = (float*) malloc(5*sizeof(float)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i*1.5; ) /* reallocating memory */ new_ptr = (float*) realloc(ptr, 10*sizeof(float)); if(new_ptr==NULL) ( cout << "Memory Re-allocation Failed"; exit(1); ) /* Initializing re-allocated memory block */ for (int i=5; i<10; i++) ( new_ptr(i) = i*2.5; ) cout << "Printing Values" << endl; for (int i=0; i<10; i++) ( cout << new_ptr(i) << endl; ) free(new_ptr); return 0; )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 मुद्रण मूल्य 0 1.5 3 4.5 6 12.5 15 17.5 20 22.5

उदाहरण 2: realloc () फ़ंक्शन new_size शून्य के साथ

 #include #include using namespace std; int main() ( int *ptr, *new_ptr; ptr = (int*) malloc(5*sizeof(int)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i; ) /* re-allocating memory with size 0 */ new_ptr = (int*) realloc(ptr, 0); if(new_ptr==NULL) ( cout << "Null Pointer"; ) else ( cout << "Not a Null Pointer"; ) return 0; )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 नल पॉइंटर

उदाहरण 3: realloc () फ़ंक्शन जब ptr NULL होता है

 #include #include #include using namespace std; int main() ( char *ptr=NULL, *new_ptr; /* reallocating memory, behaves same as malloc(20*sizeof(char)) */ new_ptr = (char*) realloc(ptr, 50*sizeof(char)); strcpy(new_ptr, "Welcome to Programiz.com"); cout << new_ptr; free(new_ptr); return 0; )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 आपका स्वागत है Programiz.com पर

दिलचस्प लेख...