Compartilhar via


_recalloc

Uma combinação de realloc e calloc. Realoca uma matriz na memória e inicializa seus elementos como 0.

Sintaxe

void *_recalloc(
   void *memblock
   size_t num,
   size_t size
);

Parâmetros

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

number
Número de elementos.

size
O comprimento, em bytes, de cada elemento.

Retornar valor

_recalloc retorna um ponteiro void para o bloco de memória realocado (e possivelmente movido).

Se não houver memória disponível suficiente para expandir o bloco para o tamanho determinado, o bloco original será mantido inalterado e NULL retornado.

Se o tamanho solicitado for zero, então o bloco apontado por memblock é liberado; o valor retornado é NULL e memblock é deixado apontando para um bloco liberado.

O valor retornado indica um espaço de armazenamento que está adequadamente alinhado para armazenamento de qualquer tipo de objeto. Para obter um ponteiro para um tipo que não seja void, use uma conversão de tipo no valor retornado.

Comentários

A função _recalloc altera o tamanho de um bloco de memória alocado. O argumento memblock aponta para o início do bloco de memória. Se memblock for NULL, _recalloc se comporta da mesma maneira que calloc e aloca um novo bloco de number * size bytes. Cada elemento é inicializado como 0. Se memblock não NULLfor , deve ser um ponteiro retornado por uma chamada anterior para calloc, mallocou realloc.

Como o novo bloco pode estar em um novo local de memória, o ponteiro retornado por _recalloc não é garantido como o ponteiro passado pelo memblock argumento.

_recalloc definirá errno para ENOMEM se a alocação de memória falhar ou se a quantidade de memória solicitada exceder _HEAP_MAXREQ. Para obter informações sobre esse e outros códigos de erro, confira errno, _doserrno, _sys_errlist e _sys_nerr.

recalloc chama realloc para usar a função _set_new_mode do C++ para definir o novo modo de manipulador. O novo modo do manipulador indica se, em caso de falha, realloc deverá chamar a nova rotina do manipulador, conforme definido por _set_new_handler. Por padrão, realloc não chama a nova rotina do manipulador em caso de falha ao alocar memória. Você pode substituir esse comportamento padrão para que, quando _recalloc falhar ao alocar memória, realloc chame a nova rotina do manipulador da mesma forma que o operador new fará quando ele falhar pelo mesmo motivo. Para substituir o padrão, chame

_set_new_mode(1);

no início do programa ou vincule com NEWMODE.OBJ.

Quando o aplicativo estiver vinculado a uma versão de depuração das bibliotecas de runtime do C, _recalloc será resolvido como _recalloc_dbg. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte O heap de depuração CRT.

_recalloc é marcado como __declspec(noalias) e __declspec(restrict), o que representa a garantia de que a função não modifica variáveis globais e que o ponteiro retornado não é um alias. Para obter mais informações, consulte noalias e restrict.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.

Requisitos

Rotina Cabeçalho necessário
_recalloc <stdlib.h> e <malloc.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Confira também

Alocação de memória
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Opções de link