C ++ realloc () - C ++ Standardbibliotek

Funktionen realloc () i C ++ omfördelar ett minnesblock som tidigare tilldelats men ännu inte frigjorts.

Funktionen realloc () omfördelar minne som tidigare tilldelats med malloc (), calloc () eller realloc () -funktion och ändå inte frigjorts med funktionen free ().

Om den nya storleken är noll beror det returnerade värdet på implementeringen av biblioteket. Det kan returnera en nullpekare eller inte.

realloc () prototyp

 ogiltig * realloc (ogiltig * ptr, storlek_t ny_storlek);

Funktionen definieras i rubrikfilen.

realloc () Parametrar

  • ptr: En pekare till minnesblocket som ska omfördelas.
  • new_size: Ett osignerat integralt värde som representerar den nya storleken på minnesblocket i byte.

realloc () Returvärde

Funktionen realloc () returnerar:

  • En pekare till början av det omfördelade minnesblocket.
  • Ingen pekare om allokeringen misslyckas.

När minnet omfördelas, om det inte finns tillräckligt med minne, frigörs inte det gamla minnesblocket och en nullpekare returneras.

Om den gamla pekaren (dvs ptr) är noll, är att anropa realloc () samma som att ringa malloc () -funktionen med den nya storleken som parameter.

Det finns två möjliga sätt att omfördela minne.

  1. Expandera eller dra ihop samma block : Minnesblocket som pekas av den gamla pekaren (dvs. ptr) expanderas eller dras in, om möjligt. Innehållet i minnesblocket förblir oförändrat upp till det lägre av de nya och gamla storlekarna. Om området utvidgas är innehållet i det nyligen tilldelade blocket odefinierat.
  2. Flytta till ny plats : Ett nytt minnesblock med storlek new_size bytes tilldelas. Även i detta fall förblir innehållet i minnesblocket oförändrat upp till det lägre av de nya och gamla storlekarna och om minnet expanderas är innehållet i det nyligen tilldelade blocket odefinierat.

Exempel 1: Hur fungerar realloc () -funktionen?

 #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ör programmet blir resultatet:

 Utskriftsvärden 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Exempel 2: realloc () -funktion med ny_storlek noll

 #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ör programmet blir resultatet:

 Nollpekare

Exempel 3: funktion realloc () när ptr är 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ör programmet blir resultatet:

 Välkommen till Programiz.com

Intressanta artiklar...