_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.

Vedere anche

Riferimenti

Allocazione di memoria

calloc

free

malloc

_msize

realloc