C ++ realloc () - štandardná knižnica C ++

Funkcia realloc () v C ++ prerozdeľuje blok pamäte, ktorý bol predtým pridelený, ale ešte nebol uvoľnený.

Funkcia realloc () prerozdeľuje pamäť, ktorá bola predtým pridelená pomocou funkcií malloc (), calloc () alebo realloc (), a ešte sa neuvoľnila pomocou funkcie free ().

Ak je nová veľkosť nulová, vrátená hodnota závisí od implementácie knižnice. Môže alebo nemusí vrátiť nulový ukazovateľ.

prototyp realloc ()

 void * realloc (void * ptr, size_t new_size);

Funkcia je definovaná v hlavičkovom súbore.

parametre realloc ()

  • ptr: Ukazovateľ na blok pamäte, ktorý sa má znova prideliť.
  • new_size: Nepodpísaná integrálna hodnota, ktorá predstavuje novú veľkosť pamäťového bloku v bajtoch.

realloc () Vrátená hodnota

Funkcia realloc () vráti:

  • Ukazovateľ na začiatok bloku pridelenej pamäte.
  • Nulový ukazovateľ, ak alokácia zlyhá.

Ak pri prerozdeľovaní pamäte nie je dostatok pamäte, starý pamäťový blok sa neuvoľní a vráti sa nulový ukazovateľ.

Ak je starý ukazovateľ (tj. Ptr) nulový, volanie funkcie realloc () je rovnaké ako volanie funkcie malloc () s novou veľkosťou ako parametrom.

Existujú dva možné spôsoby prerozdelenia pamäte.

  1. Rozbalenie alebo stiahnutie rovnakého bloku : Pamäťový blok, na ktorý ukazuje starý ukazovateľ (tj. Ptr), je podľa možnosti rozbalený alebo stiahnutý. Obsah pamäťového bloku zostáva nezmenený, a to až do menšej z nových a starých veľkostí. Ak sa oblasť rozšíri, obsah novo prideleného bloku nie je definovaný.
  2. Presun na nové miesto : Je pridelený nový blok pamäte s veľkosťou new_size bajtov. V tomto prípade tiež obsah bloku pamäte zostane nezmenený až do menšej z nových a starých veľkostí, a ak je pamäť rozšírená, obsah novo prideleného bloku je nedefinovaný.

Príklad 1: Ako funguje funkcia 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; )

Po spustení programu bude výstup:

 Hodnoty tlače 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Príklad 2: funkcia realloc () s nulou 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; )

Po spustení programu bude výstup:

 Nulový ukazovateľ

Príklad 3: funkcia realloc (), keď ptr je 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; )

Po spustení programu bude výstup:

 Vitajte na Programiz.com

Zaujímavé články...