Condividi tramite


_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, malloco 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_errliste _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