C ++ realloc () - Biblioteca padrão C ++

A função realloc () em C ++ realoca um bloco de memória que foi alocado anteriormente, mas ainda não foi liberado.

A função realloc () realoca a memória que foi alocada anteriormente usando a função malloc (), calloc () ou realloc () e ainda não liberada usando a função free ().

Se o novo tamanho for zero, o valor retornado depende da implementação da biblioteca. Ele pode ou não retornar um ponteiro nulo.

protótipo realloc ()

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

A função é definida no arquivo de cabeçalho.

Parâmetros realloc ()

  • ptr: um ponteiro para o bloco de memória a ser realocado.
  • new_size: Um valor integral não assinado que representa o novo tamanho do bloco de memória em bytes.

realloc () Valor de retorno

A função realloc () retorna:

  • Um ponteiro para o início do bloco de memória realocado.
  • Ponteiro nulo se a alocação falhar.

Ao realocar a memória, se não houver memória suficiente, o bloco de memória antigo não será liberado e um ponteiro nulo será retornado.

Se o ponteiro antigo (ou seja, ptr) for nulo, chamar realloc () é o mesmo que chamar a função malloc () com o novo tamanho como parâmetro.

Existem duas maneiras possíveis de realocar a memória.

  1. Expandindo ou contraindo o mesmo bloco : O bloco de memória apontado pelo ponteiro antigo (ptr) é expandido ou contraído, se possível. O conteúdo do bloco de memória permanece inalterado até o menor dos tamanhos novos e antigos. Se a área for expandida, o conteúdo do bloco recém-alocado será indefinido.
  2. Movendo para o novo local : Um novo bloco de memória de tamanho new_size bytes é alocado. Também neste caso, o conteúdo do bloco de memória permanece inalterado até o menor dos tamanhos novo e antigo e se a memória for expandida, o conteúdo do bloco recém-alocado é indefinido.

Exemplo 1: Como funciona a função 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 você executa o programa, a saída será:

 Valores de impressão 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Exemplo 2: função realloc () com 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 você executa o programa, a saída será:

 Ponteiro nulo

Exemplo 3: função 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 você executa o programa, a saída será:

 Bem-vindo ao Programiz.com

Artigos interessantes...