C ++ realloc () - C ++ Standard Library

A realloc () függvény a C ++ - ban átcsoportosítja a korábban kiosztott, de még nem szabadított memóriablokkot.

A realloc () függvény átcsoportosítja azt a memóriát, amelyet korábban a malloc (), calloc () vagy realloc () függvényekkel osztottak ki, de mégsem szabadították fel a free () függvény segítségével.

Ha az új méret nulla, a visszaadott érték a könyvtár megvalósításától függ. Lehetséges, hogy nem ad vissza null mutatót.

realloc () prototípus

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

A függvény a fejlécfájlban van meghatározva.

realloc () Paraméterek

  • ptr: Az átcsoportosítandó memóriablokk mutatója.
  • new_size: Előjel nélküli integrálérték, amely a memóriablokk új méretét jelzi bájtokban.

realloc () Visszatérési érték

A realloc () függvény visszatér:

  • Mutató az átcsoportosított memóriablokk elejére.
  • Null mutató, ha az allokáció nem sikerül.

A memória átcsoportosítása közben, ha nincs elég memória, a régi memóriablokk nem szabadul fel, és egy null mutató kerül vissza.

Ha a régi mutató (pl. Ptr) null, akkor a realloc () meghívása megegyezik a malloc () függvény meghívásával, paraméterként az új méretet.

A memória átcsoportosításának két módja van.

  1. Ugyanazon blokk kibővítése vagy összehúzása : A régi mutató (pl. Ptr) által jelzett memóriablokk kibővül vagy összehúzódik, ha lehetséges. A memória blokk tartalma változatlan marad az új és a régi méret kisebbikéig. Ha a terület kibővül, az újonnan lefoglalt blokk tartalma nincs meghatározva.
  2. Áthelyezés új helyre : Új, új_méret bájt méretű memóriablokk kerül lefoglalásra. Ebben az esetben a memória blokk tartalma változatlan marad az új és a régi méret közül a kisebbikig, és ha a memória kibővül, az újonnan lefoglalt blokk tartalma nincs meghatározva.

1. példa: Hogyan működik a realloc () függvény?

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

A program futtatásakor a kimenet a következő lesz:

 Nyomtatási értékek 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

2. példa: realloc () függvény new_size nullával

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

A program futtatásakor a kimenet a következő lesz:

 Null Pointer

3. példa: realloc () függvény, ha a ptr értéke 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; )

A program futtatásakor a kimenet a következő lesz:

 Üdvözöljük a Programiz.com oldalon

érdekes cikkek...