_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.
Valor retornado
_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 especificado, o bloco original permanecerá inalterado e NULL
será 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 NULL
for , 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 há garantia de que o ponteiro retornado por _recalloc
seja 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 do 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, confira Estado global no 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