realocar

Realocar os blocos de memória.

void *realloc(
   void *memblock,
   size_t size 
);

Parâmetros

  • memblock
    Ponteiro para o bloco de memória alocado anteriormente.

  • size
    Novo dimensionar em bytes.

Valor de retorno

realloc Retorna um void ponteiro para o bloco de memória realocada (e possivelmente movidos).

Se não houver memória suficiente disponível para expandir o bloco para determinado dimensionar, o bloco original é esquerda inalterada e NULL será retornado.

If size for zero, o bloco apontada por memblock é liberado; o valor retornado é NULL, e memblock é deixado apontando para um bloco liberado.

O valor retornado aponta para um espaço de armazenamento que é garantido a ser alinhado adequadamente para o armazenamento de qualquer tipo de objeto.Ao obter um apontador para um tipo diferente de void, use um tipo convertido no valor retornado.

Comentários

The realloc função altera o dimensionar de um bloco de memória alocada. The memblock argumento aponta para o início do bloco de memória. If memblock é NULL, realloc se comporta da mesma maneira que malloc e aloca um novo bloco de size bytes. If memblock não é NULL, ele deve ser um ponteiro retornado por uma telefonar anterior calloc, malloc, ou realloc.

The size argumento retorna o novo dimensionar de bloco, em bytes. O Sumário do bloco está inalterado até o menor dos tamanhos de novos e antigos, embora possa ser o novo bloco em um local diferente.Como o novo bloco pode estar em um novo local de memória, o ponteiro retornado por realloc Não há garantia de ser ponteiro passado para o memblock argumento. realloc não zero não memória recém-alocada no caso de crescimento de buffer.

In Visual C++ 2005, realloc Define errno para ENOMEM Se a alocação de memória falhar ou se exceder a quantidade de memória solicitada _HEAP_MAXREQ. Para obter informações sobre esse e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

realloccalls mallocin order to use the C++ _set_new_mode function to set the new handler mode.O novo modo de manipulador indica se, no caso de falha, malloc é telefonar a rotina manipuladora de novo sistema autônomo definido pelo _set_new_handler.Por padrão, malloc não telefonar a rotina manipuladora de novo no caso de falha ao alocar memória. Você pode substituir esse comportamento padrão para que, quando realloc Falha ao alocar memória, malloc chama a rotina de manipulador de novo na mesma forma que o new operador não quando ele falhar pelo mesmo motivo. Para substituir o padrão, ligue para

_set_new_mode(1)

no início daquelas programa ou link com NEWMODE.OBJ (consulte Opções de link).

Quando o aplicativo está vinculado com uma versão de depurar das bibliotecas de time de execução C, realloc resolve para _realloc_dbg.Para obter mais informações sobre como a pilha é gerenciada durante o processo de depurar, consulte A Heap depurar CRT.

realloc está marcado como __declspec(noalias) e __declspec(restrict), que significa que a função tem a garantia não modificar variáveis global e que o ponteiro retornado não é com alias. Para obter mais informações, consulte noalias and restringir.

Requisitos

Rotina

Cabeçalho necessário

realloc

<stdlib.h> e <malloc.h>

Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

int main( void )
{
   long *buffer, *oldbuffer;
   size_t size;

   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
      exit( 1 );

   size = _msize( buffer );
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );

   // Reallocate and show new size:
   oldbuffer = buffer;     // save pointer in case realloc fails
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
        ==  NULL )
   {
      free( oldbuffer );  // free original block
      exit( 1 );
   }
   size = _msize( buffer );
   printf_s( "Size of block after realloc of 1000 more longs: %u\n", 
            size );

   free( buffer );
   exit( 0 );
}

Size of block after malloc of 1000 longs: 4000 Size of block after realloc of 1000 more longs: 8000

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Alocação de memória

calloc

disponível

malloc