_expand
La modifica della dimensione di un blocco di memoria.
void *_expand(
void *memblock,
size_t size
);
Parametri
memblock
Puntatore in precedenza al blocco di memoria allocata.size
nuova dimensione in byte.
Valore restituito
_expand restituisce un puntatore a void al blocco di memoria ridistribuito._expanda differenza di, realloc, non può spostare un blocco per modificare le dimensioni.Pertanto, se c " è memoria sufficiente disponibile espandere il blocco senza spostarlo, memblock parametro di _expand corrisponde al valore restituito.
_expand restituisce NULL quando viene rilevato un errore durante la relativa operazione.Ad esempio, se _expand viene utilizzato per ridurre un blocco di memoria, potrebbe rilevare il danneggiamento della piccola heap di blocco o un puntatore e un ritorno non validi di blocco NULL.
Se c " è la memoria disponibile non è sufficiente espandere il blocco alla dimensione specificata senza spostarla, la funzione restituisce NULL._expand non restituisce mai un blocco espanso a una dimensione minore di quanto richiesto.Se si verifica un errore, errno indica la natura dell'errore.Per ulteriori informazioni su errno, vedere errno, _doserrno, _sys_errlist e _sys_nerr.
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 controllare la nuova dimensione elemento, utilizzare _msize.Per ottenere un puntatore a un tipo diverso da void, utilizzare un cast di tipo sul valore restituito.
Note
_expand modifica la dimensione in precedenza a un blocco di memoria allocata tentando di espandere o di un blocco senza spostare la posizione nell'heap.memblock punti di parametro all'inizio del blocco.size il parametro fornisce la nuova dimensione del blocco, in byte.Il contenuto del blocco è invariato fino a più breve di nuove dimensioni precedenti.memblock non deve essere un blocco che è stato liberato.
[!NOTA]
Sulle piattaforme a 64 bit, _expand contratto di forza non il blocco se la nuova dimensione è inferiore alla dimensione corrente; in particolare, se il blocco è minore delle dimensioni della dimensione e quindi allocato nell'heap bassa di frammentazione, _expand rilascia il blocco invariati e restituisce memblock.
Quando l'applicazione viene collegata a una versione di debug delle librerie di runtime del linguaggio C, _expand viene risolta in _expand_dbg.Per ulteriori informazioni su come l'heap è gestita durante il processo di debug, vedere L'heap di debug CRT.
Questa funzione convalida dei parametri.se memblock è un puntatore null, l'oggetto richiama di questa funzione un gestore non valido di parametro, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, errno è impostato su EINVAL e restituisce un valore di funzione NULL.se size è maggiore di _HEAP_MAXREQ, errno è impostato su ENOMEM e restituisce un valore di funzione NULL.
Requisiti
Funzione |
Intestazione di associazione |
---|---|
_expand |
<malloc.h> |
per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.
Esempio
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.