C ++ realloc () - C ++ Standardbibliotek

Funktionen realloc () i C ++ allokerer en hukommelsesblok, der tidligere er allokeret, men endnu ikke frigivet.

Funktionen realloc () omfordeler hukommelse, der tidligere blev allokeret ved hjælp af malloc (), calloc () eller realloc () -funktion og alligevel ikke frigøres ved hjælp af funktionen free ().

Hvis den nye størrelse er nul, afhænger den returnerede værdi af implementeringen af ​​biblioteket. Det returnerer muligvis eller ikke en nulmarkør.

realloc () prototype

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

Funktionen er defineret i header-fil.

realloc () Parametre

  • ptr: En markør til hukommelsesblokken, der skal omfordeles.
  • new_size: En usigneret integreret værdi, der repræsenterer den nye størrelse på hukommelsesblokken i byte.

realloc () Returværdi

Funktionen realloc () returnerer:

  • En markør til begyndelsen af ​​den allokerede hukommelsesblok.
  • Null markør, hvis tildelingen mislykkes.

Mens der omfordeles hukommelse, hvis der ikke er nok hukommelse, frigøres den gamle hukommelsesblok ikke, og en nulmarkør returneres.

Hvis den gamle markør (dvs. ptr) er nul, er det at kalde realloc () det samme som at kalde malloc () -funktionen med den nye størrelse som parameter.

Der er to mulige måder at omfordele hukommelsen på.

  1. Udvidelse eller sammentrækning af den samme blok : Hukommelsesblokken, der peges af den gamle markør (dvs. ptr), udvides eller kontraheres, hvis det er muligt. Indholdet af hukommelsesblokken forbliver uændret op til den mindste af de nye og gamle størrelser. Hvis området udvides, er indholdet af den nyligt tildelte blok udefineret.
  2. Flytter til ny placering : En ny hukommelsesblok med størrelse new_size bytes er tildelt. I dette tilfælde forbliver indholdet af hukommelsesblokken uændret op til den mindste af de nye og gamle størrelser, og hvis hukommelsen udvides, er indholdet af den nyligt tildelte blok udefineret.

Eksempel 1: Hvordan fungerer 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; )

Når du kører programmet, vil output være:

 Udskrivningsværdier 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Eksempel 2: realloc () -funktion med new_size nul

 #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 kører programmet, vil output være:

 Null Pointer

Eksempel 3: funktion realloc (), 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 kører programmet, vil output være:

 Velkommen til Programiz.com

Interessante artikler...