_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 é NULL
e 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
, malloc
ou 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_errlist
e _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