Рубрики

Использование realloc ()

Размер динамически распределяемой памяти можно изменить с помощью realloc ().

Согласно стандарту C99:

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

realloc освобождает старый объект, на который указывает ptr, и возвращает указатель на новый объект, размер которого определяется размером. Содержимое нового объекта идентично содержимому старого объекта до освобождения, вплоть до меньшего из нового и старого размеров. Любые байты в новом объекте, превышающие размер старого объекта, имеют неопределенные значения.

Следует отметить, что realloc () следует использовать только для динамически выделяемой памяти . Если память не выделяется динамически, то поведение не определено.
Например, программа 1 демонстрирует некорректное использование realloc (), а программа 2 демонстрирует правильное использование realloc ().

Программа 1:

#include <stdio.h>
#include <stdlib.h>

int main()

{

   int arr[2], i;

   int *ptr = arr;

   int *ptr_new;

     

   arr[0] = 10; 

   arr[1] = 20;      

     

   // некорректное использование new_ptr: неопределенное поведение

   ptr_new = (int *)realloc(ptr, sizeof(int)*3);

   *(ptr_new + 2) = 30;

     

   for(i = 0; i < 3; i++)

     printf("%d ", *(ptr_new + i));

  

   getchar();

   return 0;

}

Выход:
Неопределенное поведение


Программа 2:

#include <stdio.h>
#include <stdlib.h>

int main()

{

   int *ptr = (int *)malloc(sizeof(int)*2);

   int i;

   int *ptr_new;

     

   *ptr = 10; 

   *(ptr + 1) = 20;

     

   ptr_new = (int *)realloc(ptr, sizeof(int)*3);

   *(ptr_new + 2) = 30;

   for(i = 0; i < 3; i++)

       printf("%d ", *(ptr_new + i));

  

   getchar();

   return 0;

}

Выход:
10 20 30

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Использование realloc ()

0.00 (0%) 0 votes