C ++ realloc () - C ++ standaardbibliotheek

De functie realloc () in C ++ wijst een geheugenblok opnieuw toe dat eerder was toegewezen maar nog niet vrijgegeven.

De functie realloc () wijst geheugen opnieuw toe dat eerder was toegewezen met de functie malloc (), calloc () of realloc () en nog niet is vrijgegeven met de functie free ().

Als de nieuwe grootte nul is, is de geretourneerde waarde afhankelijk van de implementatie van de bibliotheek. Het kan al dan niet een null-aanwijzer retourneren.

realloc () prototype

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

De functie is gedefinieerd in het header-bestand.

realloc () Parameters

  • ptr: een pointer naar het geheugenblok dat opnieuw moet worden toegewezen.
  • new_size: een niet-ondertekende integrale waarde die de nieuwe grootte van het geheugenblok in bytes vertegenwoordigt.

realloc () Retourwaarde

De functie realloc () retourneert:

  • Een wijzer naar het begin van het opnieuw toegewezen geheugenblok.
  • Null-aanwijzer als toewijzing mislukt.

Als er tijdens het opnieuw toewijzen van geheugen niet genoeg geheugen is, wordt het oude geheugenblok niet vrijgegeven en wordt een nul-aanwijzer teruggestuurd.

Als de oude pointer (dwz ptr) null is, is het aanroepen van realloc () hetzelfde als het aanroepen van de functie malloc () met de nieuwe grootte als parameter.

Er zijn twee mogelijke manieren om geheugen opnieuw toe te wijzen.

  1. Uitbreiden of inkrimpen van hetzelfde blok : Het geheugenblok waarnaar wordt verwezen door de oude aanwijzer (dwz ptr) wordt indien mogelijk uitgebreid of samengetrokken. De inhoud van het geheugenblok blijft ongewijzigd tot de mindere van de nieuwe en oude formaten. Als het gebied wordt uitgebreid, is de inhoud van het nieuw toegewezen blok ongedefinieerd.
  2. Verplaatsen naar nieuwe locatie : er wordt een nieuw geheugenblok met de grootte new_size bytes toegewezen. Ook in dit geval blijft de inhoud van het geheugenblok ongewijzigd tot aan de kleinere van de nieuwe en oude formaten en als het geheugen wordt uitgebreid, is de inhoud van het nieuw toegewezen blok ongedefinieerd.

Voorbeeld 1: hoe werkt realloc () -functie?

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

Wanneer u het programma uitvoert, is de uitvoer:

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

Voorbeeld 2: realloc () functie met new_size nul

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

Wanneer u het programma uitvoert, is de uitvoer:

 Nul punten

Voorbeeld 3: realloc () functie wanneer ptr NULL is

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

Wanneer u het programma uitvoert, is de uitvoer:

 Welkom bij Programiz.com

Interessante artikelen...