C ++ realloc () - C ++ Standardbibliotek

Realloc () -funksjonen i C ++ omdisponerer en blokk med minne som tidligere ble tildelt, men som ennå ikke er frigjort.

Realloc () -funksjonen omdisponerer minne som tidligere ble tildelt ved hjelp av malloc (), calloc () eller realloc () -funksjon, og likevel ikke frigjort ved hjelp av free () -funksjonen.

Hvis den nye størrelsen er null, avhenger verdien som returneres av implementeringen av biblioteket. Det kan eller ikke returnere en nullpeker.

realloc () prototype

 ugyldig * realloc (ugyldig * ptr, størrelse_t ny_størrelse);

Funksjonen er definert i topptekstfilen.

realloc () Parametere

  • ptr: En peker til minneblokken som skal omdisponeres.
  • new_size: En usignert integralverdi som representerer den nye størrelsen på minneblokken i byte.

realloc () Returverdi

Funksjonen realloc () returnerer:

  • En pekepinn til begynnelsen på den omfordelte minneblokken.
  • Null pekeren hvis tildelingen mislykkes.

Mens minnet omfordeles, hvis det ikke er nok minne, blir ikke den gamle minneblokken frigjort, og en nullpeker returneres.

Hvis den gamle pekeren (dvs. ptr) er null, er å ringe til realloc () det samme som å ringe til malloc () -funksjonen med den nye størrelsen som parameter.

Det er to mulige måter å omdisponere minne på.

  1. Utvide eller trekke sammen den samme blokken : Hukommelsesblokken som pekes av den gamle pekeren (dvs. ptr) utvides eller trekkes sammen, hvis mulig. Innholdet i minneblokken forblir uendret opp til den minste av de nye og gamle størrelsene. Hvis området utvides, er innholdet i den nylig tildelte blokken udefinert.
  2. Flytter til nytt sted : En ny minneblokk med størrelse new_size bytes er tildelt. I dette tilfellet forblir innholdet i minneblokken uendret opp til den minste av den nye og gamle størrelsen, og hvis minnet utvides, er innholdet i den nylig tildelte blokken udefinert.

Eksempel 1: Hvordan fungerer realloc () -funksjonen?

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

Når du kjører programmet, vil utdataene være:

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

Eksempel 2: funksjonen realloc () med nullstørrelse null

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

Når du kjører programmet, vil utdataene være:

 Null Pointer

Eksempel 3: realloc () -funksjon når ptr er 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; )

Når du kjører programmet, vil utdataene være:

 Velkommen til Programiz.com

Interessante artikler...