C ++ realloc () - Libreria standard C ++

La funzione realloc () in C ++ rialloca un blocco di memoria precedentemente allocato ma non ancora liberato.

La funzione realloc () rialloca la memoria che era stata precedentemente allocata utilizzando la funzione malloc (), calloc () o realloc () e tuttavia non liberata utilizzando la funzione free ().

Se la nuova dimensione è zero, il valore restituito dipende dall'implementazione della libreria. Può o non può restituire un puntatore nullo.

prototipo realloc ()

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

La funzione è definita nel file di intestazione.

parametri realloc ()

  • ptr: un puntatore al blocco di memoria da riallocare.
  • new_size: un valore integrale senza segno che rappresenta la nuova dimensione del blocco di memoria in byte.

realloc () Restituisce il valore

La funzione realloc () restituisce:

  • Un puntatore all'inizio del blocco di memoria riallocato.
  • Puntatore nullo se l'allocazione fallisce.

Durante la riallocazione della memoria, se non è disponibile memoria sufficiente, il vecchio blocco di memoria non viene liberato e viene restituito un puntatore nullo.

Se il vecchio puntatore (cioè ptr) è nullo, chiamare realloc () equivale a chiamare la funzione malloc () con la nuova dimensione come parametro.

Esistono due modi possibili per riallocare la memoria.

  1. Espansione o contrazione dello stesso blocco : il blocco di memoria puntato dal vecchio puntatore (cioè ptr) viene espanso o contratto, se possibile. Il contenuto del blocco di memoria rimane invariato fino alla minore tra la nuova e la vecchia dimensione. Se l'area viene espansa, il contenuto del blocco appena allocato non è definito.
  2. Spostamento in una nuova posizione : viene allocato un nuovo blocco di memoria di dimensione new_size byte. Anche in questo caso il contenuto del blocco di memoria rimane invariato fino al minore tra la nuova e la vecchia dimensione e se la memoria viene espansa, il contenuto del blocco appena allocato non è definito.

Esempio 1: come funziona la funzione 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; )

Quando esegui il programma, l'output sarà:

 Valori di stampa 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Esempio 2: funzione realloc () con 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; )

Quando esegui il programma, l'output sarà:

 Puntatore nullo

Esempio 3: funzione realloc () quando 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; )

Quando esegui il programma, l'output sarà:

 Benvenuto su Programiz.com

Articoli interessanti...