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.