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

Funkcija realloc () v jeziku C ++ prerazporedi blok pomnilnika, ki je bil prej dodeljen, vendar še ni sproščen.

Funkcija realloc () ponovno dodeli pomnilnik, ki je bil predhodno dodeljen s funkcijo malloc (), calloc () ali realloc () in še ni sproščen s funkcijo free ().

Če je nova velikost nič, je vrnjena vrednost odvisna od izvedbe knjižnice. Vrne lahko ničelni kazalec ali pa tudi ne.

prototip realloc ()

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

Funkcija je definirana v glavi datoteke.

parametri realloc ()

  • ptr: Kazalec na pomnilniški blok, ki ga je treba prerazporediti.
  • new_size: nepodpisana integralna vrednost, ki predstavlja novo velikost pomnilniškega bloka v bajtih.

realloc () Vrnjena vrednost

Funkcija realloc () vrne:

  • Kazalec na začetek prerazporejenega pomnilniškega bloka.
  • Ničelni kazalec, če dodelitev ne uspe.

Med prerazporeditvijo pomnilnika, če ni dovolj pomnilnika, se stari pomnilniški blok ne sprosti in vrne se ničelni kazalec.

Če je stari kazalec (tj. Ptr) ničen, je klic realloc () enak klicanju funkcije malloc () z novo velikostjo kot parametrom.

Obstajata dva možna načina za prerazporeditev pomnilnika.

  1. Razširitev ali krčenje istega bloka : Pomnilniški blok, ki ga kaže stari kazalec (tj. Ptr), se po možnosti razširi ali skrči. Vsebina pomnilniškega bloka ostane nespremenjena do manjše od nove in stare velikosti. Če je območje razširjeno, vsebina na novo dodeljenega bloka ni definirana.
  2. Premik na novo lokacijo : dodeljen je nov pomnilniški blok velikosti new_size bytes. V tem primeru tudi vsebina pomnilniškega bloka ostane nespremenjena do manjše od nove in stare velikosti in če se pomnilnik razširi, vsebina novo dodeljenega bloka ni opredeljena.

Primer 1: Kako deluje 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; )

Ko zaženete program, bo rezultat:

 Vrednosti tiskanja 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Primer 2: funkcija realloc () z nič_veliko velikostjo

 #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; )

Ko zaženete program, bo rezultat:

 Ničelni kazalec

Primer 3: funkcija realloc (), ko 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; )

Ko zaženete program, bo rezultat:

 Dobrodošli na Programiz.com

Zanimive Članki...