Funcția realloc() în Biblioteca C: Cum se utilizează? Sintaxă și exemplu

Ce este realloc()?

realloc() este o funcție a bibliotecii C pentru adăugarea mai multor dimensiuni de memorie la blocurile de memorie deja alocate. Scopul realloc-ului în C este de a extinde blocurile de memorie curente, lăsând conținutul original așa cum este. Funcția realloc() ajută la reducerea dimensiunii memoriei alocate anterior prin funcțiile malloc sau calloc. realloc înseamnă realocarea memoriei.

Sintaxa pentru realloc în C

ptr = realloc (ptr,newsize);

Declarația de mai sus alocă un spațiu de memorie nou cu o dimensiune specificată în variabila newsize. După executarea funcţie, indicatorul va fi returnat la primul octet al blocului de memorie. Noua dimensiune poate fi mai mare sau mai mică decât memoria anterioară. Nu putem fi siguri că dacă blocul nou alocat va indica aceeași locație cu cea a blocului de memorie anterior. Funcția realloc din C va copia toate datele anterioare în noua regiune. Se asigură că datele vor rămâne în siguranță.

De exemplu:

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

Cum se folosește realloc()

Programul de mai jos în C demonstrează cum să utilizați realloc în C pentru a realoca memoria.

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

    }

Rezultatul reallocului în exemplul C:

Memory created successfully

Ori de câte ori realocul are ca rezultat o operație nereușită, returnează a indicator nul, iar datele anterioare sunt de asemenea eliberate.