realloc() Funktion i C Library: Hur använder man? Syntax och exempel

Vad är realloc()?

realloc () är en funktion av C-biblioteket för att lägga till mer minnesstorlek till redan allokerade minnesblock. Syftet med omlokalisering i C är att utöka nuvarande minnesblock samtidigt som det ursprungliga innehållet lämnas som det är. realloc()-funktionen hjälper till att minska storleken på tidigare allokerat minne med malloc- eller calloc-funktioner. realloc står för omallokering av minne.

Syntax för realloc i C

ptr = realloc (ptr,newsize);

Ovanstående sats allokerar ett nytt minnesutrymme med en specificerad storlek i variabeln nyhetsstorlek. Efter att ha utfört fungera, kommer pekaren att returneras till den första byten i minnesblocket. Den nya storleken kan vara större eller mindre än det tidigare minnet. Vi kan inte vara säkra på att om det nyligen allokerade blocket kommer att peka på samma plats som det föregående minnesblocket. Realloc-funktionen i C kommer att kopiera alla tidigare data i den nya regionen. Det ser till att data förblir säkra.

Till exempel:

#include <stdio.h>
int main () {
   char *ptr;
   ptr = (char *) malloc(10);
   strcpy(ptr, "Programming");
   printf(" %s,  Address = %u\n", ptr, ptr);

   ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size
   strcat(ptr, " In 'C'");
   printf(" %s,  Address = %u\n", ptr, ptr);
   free(ptr);
   return 0;
}

Hur man använder realloc()

Nedanstående program i C visar hur man använder realloc i C för att omfördela minnet.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = malloc(100);
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        
        ptr = realloc(ptr,500);
    if(ptr != NULL)
           printf("Memory created successfully\n");
           
    return 0;

    }

Resultat av omfördelningen i C-exempel:

Memory created successfully

När omlokaliseringen resulterar i en misslyckad operation, returnerar den en nollpekare, och tidigare data frigörs också.

Sammanfatta detta inlägg med: