_recalloc
Combinación de realloc
y calloc
. Reasigna una matriz en la memoria e inicializa sus elementos a 0.
Sintaxis
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Parámetros
memblock
Puntero al bloque de memoria asignado previamente.
number
Número de elementos.
size
Longitud en bytes de cada elemento.
Valor devuelto
_recalloc
devuelve un puntero void
al bloque de memoria reasignado (y, probablemente, trasladado).
Si no hay suficiente memoria disponible para expandir el bloque al tamaño especificado, el bloque original se deja sin modificar y NULL
se devuelve.
Si el tamaño solicitado es cero, el bloque señalado por memblock
se libera; el valor devuelto es NULL
y memblock
sigue apuntando a un bloque liberado.
El valor devuelto apunta a un espacio de almacenamiento correctamente alineado para almacenar cualquier tipo de objeto. Para obtener un puntero a un tipo distinto de void
, use una conversión de tipo en el valor devuelto.
Comentarios
La función _recalloc
cambia el tamaño de un bloque de memoria asignado. El argumento memblock
apunta al principio del bloque de memoria. Si memblock
es NULL
, _recalloc
se comporta del mismo modo que calloc
y asigna un nuevo bloque de number
* size
bytes. Cada elemento se inicializa en 0. Si memblock
no NULL
es , debe ser un puntero devuelto por una llamada anterior a calloc
, malloc
o realloc
.
Dado que el nuevo bloque puede estar en una nueva ubicación de memoria, no se garantiza que el puntero devuelto por _recalloc
sea el puntero pasado por el memblock
argumento .
_recalloc
establece errno
en ENOMEM
si se produce un error de asignación de memoria o si la cantidad de memoria solicitada supera _HEAP_MAXREQ
. Para obtener más información sobre este y otros códigos de error, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
recalloc
llama a realloc
para usar la función _set_new_mode
de C++ y establecer el nuevo modo de controlador. El nuevo modo de controlador indica si, en caso de error, realloc
va a llamar a la rutina del nuevo controlador, según lo establecido por _set_new_handler
. De forma predeterminada, realloc
no llama a la rutina del nuevo controlador en caso de error al asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando _recalloc
no pueda asignar memoria, realloc
llame a la rutina del nuevo controlador de la misma forma que hace el operador new
cuando se produce un error por la misma razón. Para invalidar el valor predeterminado, llame a
_set_new_mode(1);
temprano en el programa o vincúlelo con NEWMODE.OBJ.
Cuando la aplicación se vincula con una versión de depuración de las bibliotecas en tiempo de ejecución de C, _recalloc
se resuelve como _recalloc_dbg
. Para obtener más información sobre cómo se administra el montón durante el proceso de depuración, consulte El montón de depuración de CRT.
_recalloc
está marcado como __declspec(noalias)
y __declspec(restrict)
, lo que significa que se garantiza que la función no modifica variables globales y que el puntero devuelto no tiene alias. Para obtener más información, vea noalias
y restrict
.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario |
---|---|
_recalloc |
<stdlib.h> y <malloc.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Consulte también
Asignación de memoria
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Opciones de vínculo