realloc
ridistribuire i blocchi di memoria.
void *realloc(
void *memblock,
size_t size
);
Parametri
memblock
Puntatore in precedenza al blocco di memoria allocata.size
nuova dimensione in byte.
Valore restituito
realloc restituisce un oggetto void puntatore ed eventualmente spostato) al blocco di memoria ridistribuito.
Se non è disponibile memoria sufficiente per espandere il blocco alla dimensione specificata, il blocco originale rimane invariato e NULL viene restituito.
se size è pari a zero, il blocco puntato in near memblock viene liberato; il valore restituito è NULLe memblock viene lasciato desiderata in un blocco liberato.
I punti di valore restituito a uno spazio di memoria è garantito che sia allineato in modo adeguato per l'archiviazione di qualsiasi tipo di oggetto.Per ottenere un puntatore a un tipo diverso da void, utilizzare un cast di tipo sul valore restituito.
Note
realloc modifica la dimensione di un blocco di memoria allocata.memblock punti di inizio del blocco di memoria.se memblock viene NULL, realloc si comporta in modo analogo a come malloc e alloca un nuovo blocco di size byte.se memblock non viene NULL, deve essere un puntatore restituito da una chiamata precedente a calloc, malloc, o realloc.
size l'argomento fornisce la nuova dimensione del blocco, in byte.Il contenuto del blocco è invariato fino a più breve di nuove dimensioni precedenti, anche se il nuovo blocco possa trovarsi in un percorso diverso.Poiché il nuovo blocco può trovarsi in una nuova posizione di memoria, il puntatore ha restituito da realloc non è garantito che sia il puntatore passato con memblock argomento.realloc non zero solo la memoria allocata nel caso della crescita del buffer.
realloc set errno in ENOMEM se l'allocazione della memoria non riesce o se la quantità di memoria richiesta supera _HEAP_MAXREQ.Per informazioni su questa e su altri codici di errore, vedere errno, _doserrno, _sys_errlist e _sys_nerr.
reallocchiamate mallocper utilizzare C++ _set_new_mode funzione per impostare la nuova modalità del gestore.La nuova modalità del gestore indica se, in caso di errore, malloc è necessario chiamare la nuova routine del gestore come imposta da _set_new_handler.per impostazione predefinita, malloc non chiama la nuova routine del gestore su omissione di allocare la memoria.Per eseguire l'override di tale comportamento predefinito in modo che, quando realloc ha esito negativo per allocare memoria, malloc chiama la nuova routine del gestore nello stesso modo in cui new l'operatore viene effettuata quando si avrà esito negativo per lo stesso motivo.Per eseguire l'override del valore predefinito, chiamata
_set_new_mode(1)
precedenza in quelli programma, o collegamento con NEWMODE.OBJ (vedere Opzioni di collegamento).
Quando l'applicazione viene collegata a una versione di debug delle librerie di runtime del linguaggio C, realloc viene risolta in _realloc_dbg.Per ulteriori informazioni su come l'heap è gestita durante il processo di debug, vedere L'heap di debug CRT.
realloc è contrassegnato __declspec(noalias) e __declspec(restrict)pertanto, la funzione viene sempre non per modificare le variabili globali e che il puntatore restituito non viene utilizzato un alias.Per ulteriori informazioni, vedere noalias e limitare.
Requisiti
routine |
Intestazione di associazione |
---|---|
realloc |
<definito> e <malloc.h> |
per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.
Esempio
// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
long *buffer, *oldbuffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf_s( "Size of block after malloc of 1000 longs: %u\n", size );
// Reallocate and show new size:
oldbuffer = buffer; // save pointer in case realloc fails
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
{
free( oldbuffer ); // free original block
exit( 1 );
}
size = _msize( buffer );
printf_s( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.