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.
- 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ä.
- 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