Ц ++ реаллоц () - Ц ++ стандардна библиотека

Функција реаллоц () у Ц ++ прераспоређује блок меморије који је претходно додељен, али још увек није ослобођен.

Функција реаллоц () прерасподјељује меморију која је претходно додијељена помоћу функције маллоц (), цаллоц () или реаллоц (), а ипак није ослобођена помоћу функције фрее ().

Ако је нова величина нула, враћена вредност зависи од примене библиотеке. Може и не мора вратити нулл показивач.

прототип реаллоц ()

 воид * реаллоц (воид * птр, сизе_т нев_сизе);

Функција је дефинисана у датотеци заглавља.

параметри реаллоц ()

  • птр: Показивач на меморијски блок који ће се прерасподелити.
  • нев_сизе: Непотписана интегрална вредност која представља нову величину меморијског блока у бајтовима.

реаллоц () Повратна вредност

Функција реаллоц () враћа:

  • Показивач на почетак прерасподељеног меморијског блока.
  • Нулти показивач ако додељивање не успе.

Током прерасподјеле меморије, ако нема довољно меморије, стари меморијски блок се не ослобађа и враћа се нулти показивач.

Ако је стари показивач (тј. Птр) нулл, позивање реаллоц () је исто што и позивање функције маллоц () са новом величином као параметром.

Постоје два могућа начина прерасподеле меморије.

  1. Проширивање или скупљање истог блока : Меморијски блок на који указује стари показивач (тј. Птр) се проширује или скупља, ако је могуће. Садржај меморијског блока остаје непромењен до мање од нове и старе величине. Ако се подручје прошири, садржај ново додељеног блока није дефинисан.
  2. Премештање на нову локацију : Додељен је нови меморијски блок величине нев_сизе бајтова. У овом случају, садржај меморијског блока остаје непромењен до мање од нове и старе величине, а ако се меморија прошири, садржај новоодељеног блока је недефинисан.

Пример 1: Како функционише функција реаллоц ()?

 #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: функција реаллоц () са нулом нев_сизе

 #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: функција реаллоц () када је птр НУЛЛ

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

Када покренете програм, излаз ће бити:

 Добродошли на Програмиз.цом

Занимљиви Чланци...