C ++ realloc () - C ++ - vakiokirjasto

Realloc () -toiminto C ++: ssa kohdistaa uudelleen muistilohkon, joka oli aiemmin allokoitu, mutta jota ei ole vielä vapautettu.

Realloc () -toiminto jakaa uudelleen muistin, joka on aiemmin jaettu malloc () -, calloc () - tai realloc () -toiminnolla, mutta jota ei ole vapautettu free () - toiminnolla.

Jos uusi koko on nolla, palautettu arvo riippuu kirjaston toteutuksesta. Se voi palauttaa tyhjän osoittimen tai ei.

realloc () prototyyppi

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

Toiminto määritetään otsikkotiedostossa.

realloc () -parametrit

  • ptr: Osoitin uudelleen kohdennettavaan muistilohkoon.
  • new_size: allekirjoittamaton integraaliarvo, joka edustaa muistilohkon uutta kokoa tavuina.

realloc () Palautusarvo

Realloc () -funktio palauttaa:

  • Osoitin uudelleen kohdennetun muistilohkon alkuun.
  • Nolla osoitin, jos allokointi epäonnistuu.

Jos muistia kohdennetaan uudelleen, jos muistia ei ole tarpeeksi, vanha muistilohko ei vapautu ja nollaosoitin palautetaan.

Jos vanha osoitin (ts. Ptr) on tyhjä, realloc (): n kutsuminen on sama kuin malloc () -funktion kutsuminen parametrina uusi koko.

Muistia voidaan kohdistaa uudelleen kahdella tavalla.

  1. Saman lohkon laajentaminen tai supistaminen : Vanhan osoittimen osoittama muistilohko (ts. Ptr) laajennetaan tai supistetaan, jos mahdollista. Muistilohkon sisältö pysyy muuttumattomana uusimpaan ja vanhempaan kokoon saakka. Jos aluetta laajennetaan, vasta määritetyn lohkon sisältöä ei määritellä.
  2. Siirtyminen uuteen sijaintiin : Uusi muistikoko, jonka koko on new_size tavua, varataan. Tässäkin tapauksessa muistilohkon sisältö pysyy muuttumattomana pienempään uuteen ja vanhaan kokoon saakka, ja jos muistia laajennetaan, vasta varatun lohkon sisältöä ei ole määritelty.

Esimerkki 1: Kuinka funktio realloc () toimii?

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

Kun suoritat ohjelmaa, tulos on:

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

Esimerkki 2: funktio realloc () new_size zero

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

Kun suoritat ohjelmaa, tulos on:

 Tyhjä osoitin

Esimerkki 3: funktio realloc (), kun ptr on 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; )

Kun suoritat ohjelmaa, tulos on:

 Tervetuloa Programiz.com-sivustolle

Mielenkiintoisia artikkeleita...