C ++ realloc () - biblioteka standardowa C ++

Funkcja realloc () w C ++ ponownie przydziela blok pamięci, który został wcześniej przydzielony, ale nie został jeszcze zwolniony.

Funkcja realloc () ponownie przydziela pamięć, która została wcześniej przydzielona za pomocą funkcji malloc (), calloc () lub realloc (), a jeszcze nie została zwolniona za pomocą funkcji free ().

Jeśli nowy rozmiar wynosi zero, zwracana wartość zależy od implementacji biblioteki. Może zwracać pusty wskaźnik lub nie.

realloc () prototyp

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

Funkcja jest zdefiniowana w pliku nagłówkowym.

Parametry realloc ()

  • ptr: wskaźnik do bloku pamięci, który ma zostać ponownie przydzielony.
  • nowy_rozmiar: całkowita wartość bez znaku, która reprezentuje nowy rozmiar bloku pamięci w bajtach.

realloc () Zwracana wartość

Funkcja realloc () zwraca:

  • Wskaźnik do początku ponownie przydzielonego bloku pamięci.
  • Wskaźnik zerowy, jeśli alokacja nie powiedzie się.

Jeśli podczas ponownego przydzielania pamięci nie ma wystarczającej ilości pamięci, stary blok pamięci nie jest zwalniany i zwracany jest wskaźnik zerowy.

Jeśli stary wskaźnik (np. Ptr) ma wartość null, wywołanie funkcji realloc () jest tym samym, co wywołanie funkcji malloc () z nowym rozmiarem jako parametrem.

Istnieją dwa możliwe sposoby ponownego przydzielenia pamięci.

  1. Rozszerzanie lub zmniejszanie tego samego bloku : Blok pamięci wskazywany przez stary wskaźnik (np. Ptr) jest rozszerzany lub zmniejszany, jeśli to możliwe. Zawartość bloku pamięci pozostaje niezmieniona do mniejszego z nowych i starych rozmiarów. Jeśli obszar jest rozszerzony, zawartość nowo przydzielonego bloku jest niezdefiniowana.
  2. Przenoszenie do nowej lokalizacji : przydzielany jest nowy blok pamięci o rozmiarze new_size bajtów. Również w tym przypadku zawartość bloku pamięci pozostaje niezmieniona do mniejszego z nowych i starych rozmiarów, a jeśli pamięć jest rozszerzona, zawartość nowo przydzielonego bloku jest niezdefiniowana.

Przykład 1: Jak działa funkcja 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; )

Po uruchomieniu programu wynik będzie następujący:

 Wydruk wartości 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Przykład 2: funkcja realloc () z new_size zero

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

Po uruchomieniu programu wynik będzie następujący:

 Wskaźnik zerowy

Przykład 3: funkcja realloc (), gdy ptr ma wartość 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; )

Po uruchomieniu programu wynik będzie następujący:

 Witamy w Programiz.com

Interesujące artykuły...