Compartilhar via


possível realocar

Realocar os blocos de memória.

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

Parâmetros

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

  • size
    Novo tamanho em bytes.

Valor de retorno

reallocRetorna um void o 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 o tamanho, o bloco original permanece inalterada, e NULL é retornado.

Se size for zero, então o bloco apontada por memblock é liberada. o valor de retorno é NULL, e memblock é deixado aponta um bloco liberado.

O valor de retorno aponta para um espaço de armazenamento que é garantido para ser devidamente alinhado para o armazenamento de qualquer tipo de objeto.Para obter um ponteiro para um tipo diferente de void, use um tipo de projeção no valor de retorno.

Comentários

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

O size argumento fornece o novo tamanho do bloco, em bytes.O conteúdo do bloco está inalterado até o menor dos tamanhos de novos e antigos, embora o novo bloco pode estar em um local diferente.Como o novo bloco pode ser em um novo local de memória, o ponteiro retornado por realloc não é garantida para ser o ponteiro transmitido por meio do memblock argumento.reallocfaz não zero recém-alocado memória no caso de crescimento de buffer.

reallocdefine errno para ENOMEM se a alocação de memória falhar ou se a quantidade de memória solicitada excede _HEAP_MAXREQ.Para obter informações sobre este e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

reallocchamadas mallocpara usar o C++ _set_new_mode função para definir o novo modo de manipulador.O novo modo de manipulador indica se deve, em caso de falha, malloc é chamar a rotina manipuladora de novo conforme definido por _set_new_handler.Por padrão, malloc não chama a rotina manipuladora de novo em 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 manipuladora de novo na mesma maneira que o new operador oferece quando falhar pelo mesmo motivo.Para substituir o padrão, chamar.

_set_new_mode(1)

no início do que aquelas programa ou o vínculo com o NEWMODE.OBJ (see Opções de link).

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

reallocestá marcado como __declspec(noalias) e __declspec(restrict), que significa que a função é garantida que não modificar variáveis globais, e que o ponteiro retornado não é com alias.Para obter mais informações, consulte noalias e restringir.

Requisitos

Rotina

Cabeçalho necessário

realloc

<stdlib.h> e <malloc.h>

Para obter informações adicionais de 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 );
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar 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

livre

malloc