Condividi tramite


_expand

Modifica la dimensione di un blocco di memoria.

void *_expand( 
   void *memblock,
   size_t size 
);

Parametri

  • memblock
    Puntatore al blocco di memoria allocato precedentemente.

  • size
    Nuova dimensione in byte.

Valore restituito

_expand restituisce un puntatore void al blocco di memoria riallocato. _expand, a differenza di realloc, non può spostare un blocco per modificare le sue dimensioni. Pertanto, se vi è memoria sufficiente ad espandere il blocco senza spostarlo, il parametro memblock a _expand è uguale al valore restituito.

_expand restituisce NULL quando viene rilevato un errore durante l'operazione. Ad esempio, se _expand viene utilizzato per ridurre un blocco di memoria, potrebbe rilevare il danneggiamento di un blocco nell'heap oppure un puntatore di blocco non valido e ritorna NULL.

Se la memoria disponibile non è sufficiente per espandere il blocco alla dimensione specificata senza spostarlo, la funzione restituisce NULL. _expand non restituisce mai un blocco espanso ad una dimensione minore di quella richiesta. Se si verifica un errore, errno indica la natura dell'errore. Per ulteriori informazioni su errno, vedere errno, _doserrno, _sys_errlist, and _sys_nerr.

I valore restituito punta ad uno spazio di memoria che garantisce l'allineamento adeguato per l'archiviazione di qualsiasi tipo di oggetto. Per controllare la nuova dimensione dell'elemento, utilizzare _msize. Per ottenere un puntatore a un tipo diverso da void, utilizzare un cast di tipo sul valore restituito.

Note

La funzione _expand cambia la dimensione ad un blocco di memoria precedentemente allocato tentando di espandere o contrarre il blocco senza spostarne la posizione nell'heap. Il parametro memblock punta all'inizio del blocco . Il parametro size fornisce la nuova dimensione del blocco, in byte. Il contenuto del blocco è invariato fino alla più corta delle nuove e vecchie dimensioni. memblock non deve essere un blocco che è stato liberato.

Nota

Sulle piattaforme a 64 bit, _expand potrebbe non contrarre il blocco se la nuova dimensione è inferiore alla dimensione corrente; in particolare, se il blocco è minore di 16K nella dimensione e quindi allocato nell'heap inferiore di frammentazione , _expand lascia invariato il blocco e restituisce memblock.

Quando l'applicazione viene collegata a una versione di debug delle librerie di runtime del linguaggio C, _expand viene identificato come _expand_dbg. Per ulteriori informazioni su come viene gestito l'heap durante il processo di debug, vedere L'heap di debug CRT.

Questa funzione convalida i parametri. Se memblock è un puntatore a null, questa funzione richiama un gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno viene impostato su EINVAL e la funzione restituisce NULL. Se size è maggiore di _HEAP_MAXREQ, errno è impostato su ENOMEM e la funzione restituisce NULL.

Requisiti

Funzione

Intestazione obbligatoria

_expand

<malloc.h>

Per ulteriori informazioni sulla compatibilità, 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 standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

Allocazione di memoria

calloc

disponibili

malloc

_msize

realloc