C ++ realloc () - C ++ standartinė biblioteka

Funkcija „realloc“ (C ++) perskirsto anksčiau priskirtą, bet dar neišlaisvintą atminties bloką.

Realloc () funkcija perskirsto atmintį, kuri anksčiau buvo paskirta naudojant malloc (), calloc () arba realloc () funkciją, tačiau dar neatlaisvinta naudojant free () funkciją.

Jei naujas dydis yra lygus nuliui, grąžinta vertė priklauso nuo bibliotekos įdiegimo. Jis gali grąžinti nulinį rodyklę arba ne.

realloc () prototipas

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

Funkcija apibrėžta antraštės faile.

realloc () parametrai

  • ptr: žymeklis į atminties bloką, kurį reikia perskirstyti.
  • new_size: Nepasirašyta integralinė reikšmė, kuri nurodo naują atminties bloko dydį baitais.

realloc () Grąžinimo vertė

Funkcija „realloc“ () grąžina:

  • Rodyklė į perskirstytos atminties bloko pradžią.
  • Nulis rodyklės, jei nepavyksta paskirstyti.

Perskirstant atmintį, jei nepakanka atminties, senasis atminties blokas neatlaisvinamas ir grąžinamas nulinis rodyklė.

Jei senasis žymeklis (ty ptr) yra nulinis, iškvietimas realloc () yra tas pats, kas iškviesti malloc () funkciją su nauju dydžiu kaip parametru.

Yra du galimi atminties perskirstymo būdai.

  1. To paties bloko išplėtimas arba sutraukimas: jei įmanoma, senojo žymiklio (t. Y. Ptr) rodomas atminties blokas yra išplėstas arba sutraukiamas. Atminties bloko turinys lieka nepakitęs iki mažesnio iš naujų ir senų dydžių. Jei plotas išplėstas, naujai priskirto bloko turinys nėra apibrėžtas.
  2. Perkeliama į naują vietą : priskiriamas naujas „ new_size“ baitų dydžio atminties blokas. Šiuo atveju atminties bloko turinys lieka nepakitęs iki mažesnio iš naujųjų ir senųjų dydžių, o jei atmintis praplečiama, naujai priskirto bloko turinys nėra apibrėžtas.

1 pavyzdys: Kaip veikia „realloc“) funkcija?

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

Kai paleisite programą, išvestis bus:

 Spausdinimo vertės 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

2 pavyzdys: funkcija realloc () su new_size nulis

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

Kai paleisite programą, išvestis bus:

 Null pointeris

3 pavyzdys: funkcija „realloc ()“, kai ptr yra 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; )

Kai paleisite programą, išvestis bus:

 Sveiki atvykę į Programiz.com

Įdomios straipsniai...