_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 NULLes , debe ser un puntero devuelto por una llamada anterior a calloc, malloco 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