C ++ realloc () - C ++ standardna knjižnica

Funkcija realloc () u C ++ preraspoređuje blok memorije koji je prethodno dodijeljen, ali još nije oslobođen.

Funkcija realloc () preraspodjeljuje memoriju koja je prethodno dodijeljena pomoću funkcije malloc (), calloc () ili realloc (), a još nije oslobođena pomoću funkcije free ().

Ako je nova veličina nula, vraćena vrijednost ovisi o implementaciji knjižnice. Može vraćati null pokazivač, ali ne mora.

prototip realloc ()

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

Funkcija je definirana u zaglavnoj datoteci.

parametri realloc ()

  • ptr: pokazivač na memorijski blok koji će se preraspodijeliti.
  • new_size: Nepotpisana integralna vrijednost koja predstavlja novu veličinu memorijskog bloka u bajtovima.

realloc () Povratna vrijednost

Funkcija realloc () vraća:

  • Pokazivač na početak preraspodijeljenog memorijskog bloka.
  • Nulti pokazivač ako dodjela ne uspije.

Tijekom preraspodjele memorije, ako nema dovoljno memorije, stari memorijski blok se ne oslobađa i vraća se nulti pokazivač.

Ako je stari pokazivač (tj. Ptr) null, pozivanje realloc () isto je što i pozivanje funkcije malloc () s novom veličinom kao parametrom.

Postoje dva moguća načina preraspodjele memorije.

  1. Proširivanje ili skupljanje istog bloka : Memorijski blok na koji upućuje stari pokazivač (tj. Ptr) proširuje se ili skuplja, ako je moguće. Sadržaj memorijskog bloka ostaje nepromijenjen do manje od nove i stare veličine. Ako se područje proširi, sadržaj novo dodijeljenog bloka nije definiran.
  2. Premještanje na novo mjesto : Dodijeljen je novi memorijski blok veličine new_size bajtova. U ovom slučaju, sadržaj memorijskog bloka ostaje nepromijenjen do manje od nove i stare veličine, a ako se memorija proširi, sadržaj novo dodijeljenog bloka nije definiran.

Primjer 1: Kako funkcionira funkcija 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; )

Kada pokrenete program, izlaz će biti:

 Vrijednosti ispisa 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Primjer 2: funkcija realloc () s nulom 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; )

Kada pokrenete program, izlaz će biti:

 Nulti pokazivač

Primjer 3: funkcija realloc () kada je 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; )

Kada pokrenete program, izlaz će biti:

 Dobrodošli na Programiz.com

Zanimljivi članci...