_recalloc
Combinazione di realloc
e calloc
. Rialloca una matrice in memoria e ne inizializza gli elementi su 0.
Sintassi
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Parametri
memblock
Puntatore al blocco di memoria allocato in precedenza.
number
Numero di elementi.
size
Lunghezza in byte di ogni elemento.
Valore restituito
_recalloc
restituisce un puntatore void
al blocco di memoria riallocato (e possibilmente spostato).
Se la memoria disponibile non è sufficiente per espandere il blocco fino alle dimensioni specificate, il blocco originale rimane invariato e NULL
viene restituito.
Se le dimensioni richieste sono zero, il blocco a cui punta memblock
viene liberato. Il valore restituito è NULL
e memblock
punta a sinistra a un blocco liberato.
Il valore restituito punta a uno spazio di archiviazione allineato in modo adeguato per l'archiviazione di qualsiasi tipo di oggetto. Per ottenere un puntatore a un tipo diverso da void
, usare un cast del tipo sul valore restituito.
Osservazioni:
La funzione _recalloc
modifica la dimensione di un blocco di memoria allocato. L'argomento memblock
punta all'inizio del blocco di memoria. Se memblock
è NULL
, _recalloc
si comporta allo stesso modo di calloc
e alloca un nuovo blocco di number
* size
byte. Ogni elemento viene inizializzato su 0. Se memblock
non NULL
è , deve essere un puntatore restituito da una chiamata precedente a calloc
, malloc
o realloc
.
Poiché il nuovo blocco può trovarsi in una nuova posizione di memoria, il puntatore restituito da _recalloc
non è garantito che il puntatore venga passato tramite l'argomento memblock
.
_recalloc
imposta errno
su ENOMEM
se l'allocazione di memoria ha esito negativo o se la quantità di memoria richiesta supera _HEAP_MAXREQ
. Per informazioni su questo e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
recalloc
chiama realloc
per usare la funzione C++ _set_new_mode
per impostare la nuova modalità del gestore. La nuova modalità del gestore indica se, in caso di errore, realloc
deve chiamare la routine del nuovo gestore come impostato da _set_new_handler
. Per impostazione predefinita, realloc
non chiama la nuova routine del gestore in caso di errore di allocazione della memoria. È possibile eseguire l'override di questo comportamento predefinito in modo che, quando _recalloc
non riesce ad allocare memoria, realloc
chiami la routine del nuovo gestore, come fa l'operatore new
quando non riesce per lo stesso motivo. Per eseguire l'override del comportamento predefinito, chiamare
_set_new_mode(1);
all'inizio del programma o collegare con NEWMODE.OBJ.
Quando l'applicazione è collegata a una versione di debug delle librerie di runtime C, _recalloc
viene risolto in _recalloc_dbg
. Per altre informazioni sulla gestione dell'heap durante il processo di debug, vedere Heap di debug CRT.
_recalloc
è contrassegnato __declspec(noalias)
e __declspec(restrict)
, il che significa che la funzione non può modificare le variabili globali e che il puntatore restituito non è aliasato. Per altre informazioni, vedere noalias
e restrict
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
_recalloc |
<stdlib.h> e <malloc.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Vedi anche
Allocazione di memoria
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Opzioni di collegamento