C ++ realloc () - standardní knihovna C ++

Funkce realloc () v C ++ přerozděluje blok paměti, který byl dříve přidělen, ale ještě nebyl uvolněn.

Funkce realloc () přerozděluje paměť, která byla dříve přidělena pomocí funkce malloc (), calloc () nebo realloc () a dosud nebyla uvolněna pomocí funkce free ().

Pokud je nová velikost nulová, vrácená hodnota závisí na implementaci knihovny. Může nebo nemusí vrátit nulový ukazatel.

prototyp realloc ()

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

Funkce je definována v hlavičkovém souboru.

parametry realloc ()

  • ptr: Ukazatel na blok paměti, který má být znovu přidělen.
  • new_size: Nepodepsaná integrální hodnota, která představuje novou velikost bloku paměti v bajtech.

realloc () Návratová hodnota

Funkce realloc () vrací:

  • Ukazatel na začátek bloku přidělené paměti.
  • Nulový ukazatel, pokud přidělení selže.

Pokud při přerozdělení paměti není dostatek paměti, starý blok paměti se neuvolní a vrátí se nulový ukazatel.

Pokud je starý ukazatel (tj. Ptr) null, volání realloc () je stejné jako volání funkce malloc () s novou velikostí jako jeho parametrem.

Existují dva možné způsoby přerozdělení paměti.

  1. Rozbalení nebo smrštění stejného bloku : Paměťový blok, na který ukazuje starý ukazatel (tj. Ptr), je pokud možno rozšířen nebo zúžen. Obsah bloku paměti zůstává nezměněn až do menší z nové a staré velikosti. Pokud je oblast rozšířena, obsah nově přiděleného bloku není definován.
  2. Přesun do nového umístění : Je přidělen nový blok paměti o velikosti new_size bajtů. V tomto případě také obsah bloku paměti zůstane nezměněn až do menší z nových a starých velikostí a pokud je paměť rozšířena, obsah nově přiděleného bloku není definován.

Příklad 1: Jak funguje funkce 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; )

Když spustíte program, výstup bude:

 Hodnoty tisku 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Příklad 2: funkce realloc () s nulovou 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; )

Když spustíte program, výstup bude:

 Nulový ukazatel

Příklad 3: funkce realloc (), když 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; )

Když spustíte program, výstup bude:

 Vítejte na Programiz.com

Zajímavé články...