C ++ realloc () - C ++ standarta bibliotēka

Funkcija realloc () C ++ lokalizē iepriekš piešķirto, bet vēl neatbrīvo atmiņas bloku.

Funkcija realloc () pārdala atmiņu, kas iepriekš tika piešķirta, izmantojot malloc (), calloc () vai realloc (), un tomēr netika atbrīvota, izmantojot free () funkciju.

Ja jaunais izmērs ir nulle, atgrieztā vērtība ir atkarīga no bibliotēkas ieviešanas. Tas var vai nevar atgriezt nulles rādītāju.

realloc () prototips

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

Funkcija ir definēta galvenes failā.

realloc () parametri

  • ptr: Pārdalāmā atmiņas bloka rādītājs.
  • new_size: neparakstīta neatņemama vērtība, kas attēlo jauno atmiņas bloka lielumu baitos.

realloc () Atgriešanās vērtība

Funkcija realloc () atgriež:

  • Norāde uz pārdalītās atmiņas bloka sākumu.
  • Nulles rādītājs, ja piešķiršana neizdodas.

Pārdalot atmiņu, ja atmiņas nav pietiekami daudz, vecais atmiņas bloks netiek atbrīvots un tiek atgriezts nulles rādītājs.

Ja vecais rādītājs (ti, ptr) nav derīgs, realloc () izsaukšana ir tāda pati kā malloc () izsaukšana ar parametra jauno izmēru.

Ir divi iespējamie atmiņas pārdalīšanas veidi.

  1. Viena bloka paplašināšana vai slēgšana: ja iespējams, atmiņas bloks, uz kuru norāda vecais rādītājs (ti, ptr), tiek paplašināts vai samazināts. Atmiņas bloka saturs nemainās līdz mazākajam no jaunā un vecā izmēra. Ja apgabals tiek paplašināts, tikko piešķirtā bloka saturs nav definēts.
  2. Pāreja uz jaunu vietu : tiek piešķirts jauns atmiņas bloks ar lielumu new_size baiti. Arī šajā gadījumā atmiņas bloka saturs nemainās līdz mazākajam no jaunā un vecā izmēra, un, ja atmiņa tiek paplašināta, tikko piešķirtā bloka saturs nav definēts.

1. piemērs: Kā darbojas realloc () funkcija?

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

Palaidot programmu, izeja būs:

 Drukāšanas vērtības 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

2. piemērs: funkcija realloc () ar new_size nulli

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

Palaidot programmu, izeja būs:

 Null rādītājs

3. piemērs: funkcija realloc (), kad ptr ir 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; )

Palaidot programmu, izeja būs:

 Laipni lūdzam vietnē Programiz.com

Interesanti raksti...