C ++ realloc () - C ++ standardraamatukogu

Funktsioon realloc () jaotises C ++ jaotab ümber mäluploki, mis oli varem eraldatud, kuid mida veel ei vabastatud.

Funktsioon realloc () jaotab ümber mälu, mis oli varem eraldatud malloc (), calloc () või realloc () funktsioonide abil, kuid mida pole siiski vabastatud funktsiooni free () abil.

Kui uus suurus on null, sõltub tagastatav väärtus teegi rakendamisest. See võib nullnäidrit tagastada või mitte.

realloc () prototüüp

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

Funktsioon on määratletud päisefailis.

realloc () parameetrid

  • ptr: osuti ümberjagatavale mäluplokile.
  • new_size: Allkirjastamata integraalväärtus, mis tähistab mäluploki uut suurust baitides.

realloc () Tagastusväärtus

Funktsioon realloc () tagastab:

  • Kurss ümberjagatud mäluploki algusesse.
  • Nullkursor, kui jaotamine nurjub.

Kui mälu on piisavalt jaotatud, ei vabastata vana mäluplokki ja tagastatakse nullkursor.

Kui vana osuti (st ptr) on null, on realloc () kutsumine sama mis malloc () funktsiooni kutsumine, mille parameeter on uus suurus.

Mälu ümberjaotamiseks on kaks võimalust.

  1. Sama ploki laiendamine või kokkutõmbamine : võimaluse korral laiendatakse või sõlmitakse vana osuti (st ptr) osutatav mäluplokk. Mäluploki sisu jääb muutumatuks kuni väiksema uue ja vana suurusega. Kui ala laiendatakse, on äsja eraldatud ploki sisu määratlemata.
  2. Uude asukohta liikumine : eraldatakse uus mäluplokk suurusega new_size baiti. Ka sel juhul jääb mäluploki sisu muutumatuks kuni väiksema uue ja vana suurusega ning kui mälu laiendatakse, on äsja eraldatud ploki sisu määratlemata.

Näide 1: Kuidas funktsioon realloc () töötab?

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

Programmi käivitamisel on väljund järgmine:

 Väärtuste printimine 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Näide 2: funktsioon realloc () new_size nulliga

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

Programmi käivitamisel on väljund järgmine:

 Nullpointer

Näide 3: funktsioon realloc (), kui 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; )

Programmi käivitamisel on väljund järgmine:

 Tere tulemast saidile Programiz.com

Huvitavad Artiklid...