C ++ realloc () - Стандартная библиотека C ++

Функция realloc () в C ++ перераспределяет блок памяти, который был ранее выделен, но еще не освобожден.

Функция realloc () перераспределяет память, которая была ранее выделена с помощью функций malloc (), calloc () или realloc () и еще не освобождена с помощью функции free ().

Если новый размер равен нулю, возвращаемое значение зависит от реализации библиотеки. Он может возвращать или не возвращать нулевой указатель.

realloc () прототип

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

Функция определена в заголовочном файле.

realloc () Параметры

  • ptr: указатель на блок памяти, который нужно перераспределить.
  • new_size: целое значение без знака, которое представляет новый размер блока памяти в байтах.

realloc () Возвращаемое значение

Функция realloc () возвращает:

  • Указатель на начало перераспределенного блока памяти.
  • Нулевой указатель при сбое выделения.

При перераспределении памяти, если памяти недостаточно, старый блок памяти не освобождается и возвращается нулевой указатель.

Если старый указатель (т.е. ptr) равен нулю, вызов realloc () аналогичен вызову функции malloc () с новым размером в качестве параметра.

Есть два возможных способа перераспределения памяти.

  1. Расширение или сжатие одного и того же блока : блок памяти, на который указывает старый указатель (т.е. ptr), расширяется или сокращается, если это возможно. Содержимое блока памяти остается неизменным до меньшего из нового или старого размера. Если область расширена, содержимое вновь выделенного блока не определено.
  2. Перемещение в новое место : выделяется новый блок памяти размером new_size bytes. В этом случае также содержимое блока памяти остается неизменным до меньшего из нового и старого размеров, и если память расширяется, содержимое вновь выделенного блока не определено.

Пример 1: Как работает функция realloc ()?

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

Когда вы запустите программу, вывод будет:

 Печать значений 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Пример 2: функция realloc () с нулевым значением new_size

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

Когда вы запустите программу, вывод будет:

 Нулевой указатель

Пример 3: функция realloc (), когда ptr равен NULL

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

Когда вы запустите программу, вывод будет:

 Добро пожаловать на Programiz.com

Интересные статьи...