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 байт. У цьому випадку також вміст блоку пам'яті залишається незмінним аж до меншого серед нових і старих розмірів, і якщо пам'ять розширена, вміст нещодавно виділеного блоку не визначено.

Приклад 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

Цікаві статті...