C ++ realloc () - Biblioteca standard C ++

Funcția realloc () din C ++ realocă un bloc de memorie care a fost alocat anterior, dar care nu a fost încă eliberat.

Funcția realloc () realocă memoria care a fost alocată anterior folosind funcția malloc (), calloc () sau realloc () și totuși neeliberată folosind funcția free ().

Dacă noua dimensiune este zero, valoarea returnată depinde de implementarea bibliotecii. Poate returna sau nu un indicator nul.

prototip realloc ()

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

Funcția este definită în fișierul antet.

realloc () Parametri

  • ptr: Un indicator către blocul de memorie care urmează să fie realocat.
  • new_size: O valoare integrală nesemnată care reprezintă noua dimensiune a blocului de memorie în octeți.

realloc () Valoare returnată

Funcția realloc () returnează:

  • Un indicator către începutul blocului de memorie realocat.
  • Pointer nul dacă alocarea eșuează.

În timp ce realocați memoria, dacă nu există suficientă memorie, atunci vechiul bloc de memorie nu este eliberat și un pointer nul este returnat.

Dacă pointerul vechi (adică ptr) este nul, apelarea realloc () este aceeași cu apelarea funcției malloc () cu dimensiunea nouă ca parametru.

Există două modalități posibile de realocare a memoriei.

  1. Extinderea sau contractarea aceluiași bloc : blocul de memorie indicat de pointerul vechi (adică ptr) este extins sau contractat, dacă este posibil. Conținutul blocului de memorie rămâne neschimbat până la cea mai mică dintre dimensiunile noi și vechi. Dacă zona este extinsă, conținutul blocului nou alocat este nedefinit.
  2. Mutarea într-o locație nouă : este alocat un nou bloc de memorie de dimensiuni new_size bytes. În acest caz, de asemenea, conținutul blocului de memorie rămâne neschimbat până la cea mai mică dintre dimensiunile noi și vechi și, dacă memoria este extinsă, conținutul blocului nou alocat este nedefinit.

Exemplul 1: Cum funcționează funcția 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; )

Când rulați programul, ieșirea va fi:

 Valori de imprimare 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Exemplul 2: funcția realloc () cu zero 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; )

Când rulați programul, ieșirea va fi:

 Indicator nul

Exemplul 3: funcția realloc () când ptr este 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; )

Când rulați programul, ieșirea va fi:

 Bine ați venit la Programiz.com

Articole interesante...