Partilhar via


_recalloc

Uma combinação de realloc e calloc. Realoca uma matriz na memória e inicializa seus elementos para 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
Comprimento em bytes de cada elemento.

Valor de retorno

_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 será retornado.

Se o tamanho solicitado for zero, o bloco apontado por memblock será liberado; O valor de retorno é NULLe memblock é deixado apontando para um bloco liberado.

O valor de retorno aponta para um espaço de armazenamento que está devidamente alinhado para armazenamento de qualquer tipo de objeto. Para obter um ponteiro para um tipo diferente de void, use um tipo convertido no valor de retorno.

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 estiver NULL, 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, não é garantido que o ponteiro retornado por _recalloc seja o ponteiro passado pelo argumento memblock.

_recalloc define errno como 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 este e outros códigos de erro, consulte errno, _doserrno, _sys_errliste _sys_nerr.

recalloc chama realloc para usar a função _set_new_mode C++ para definir o novo modo manipulador. O novo modo de manipulador indica se, em caso de falha, realloc deve 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 na alocação de memória. Você pode substituir esse comportamento padrão para que, quando _recalloc falha ao alocar memória, realloc chame a nova rotina do manipulador da mesma maneira que o operador new faz quando falha pelo mesmo motivo. Para substituir o padrão, chame

_set_new_mode(1);

no início do programa, ou link com NEWMODE.OBJ.

Quando o aplicativo é vinculado a uma versão de depuração das bibliotecas de tempo de execução C, _recalloc resolve para _recalloc_dbg. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte The CRT debug heap.

_recalloc é marcado como __declspec(noalias) e __declspec(restrict), o que significa que a função tem a garantia de não modificar variáveis globais e que o ponteiro retornado não tem aliased. 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 noCRT .

Requerimentos

Rotina Cabeçalho obrigatório
_recalloc <stdlib.h> e <malloc.h>

Para obter mais informações sobre compatibilidade, consulte de compatibilidade .

Ver também

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