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

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