Функция realloc() в библиотеке C: как использовать? Синтаксис и пример

Что такое реаллок()?

realloc () — это функция библиотеки C для добавления большего размера памяти к уже выделенным блокам памяти. Целью realloc в C является расширение текущих блоков памяти, оставляя исходное содержимое таким, какое оно есть. Функция realloc() помогает уменьшить размер ранее выделенной памяти с помощью функций malloc или calloc. Realloc означает перераспределение памяти.

Синтаксис Realloc в C

ptr = realloc (ptr,newsize);

Приведенный выше оператор выделяет новое пространство памяти с указанным размером в переменной newsize. После выполнения функция, указатель будет возвращен на первый байт блока памяти. Новый размер может быть больше или меньше предыдущего размера памяти. Мы не можем быть уверены, что новый выделенный блок будет указывать на то же место, что и предыдущий блок памяти. Функция realloc в C скопирует все предыдущие данные в новый регион. Это гарантирует, что данные останутся в безопасности.

Например:

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

Как использовать realloc()

Приведенная ниже программа на C демонстрирует, как использовать realloc в C для перераспределения памяти.

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

    }

Результат перераспределения в примере C:

Memory created successfully

Всякий раз, когда realloc приводит к неудачной операции, он возвращает нулевой указатель, и предыдущие данные также освобождаются.